#python #django #web-development-server
#python #django #веб-разработка-сервер
Вопрос:
У меня есть класс Tweet, и я пытаюсь добавить к нему пользовательскую модель, чтобы у пользователя могло быть много твитов, но твит принадлежит только пользователю.
class Tweet(models.Model):
context = models.TextField(blank=True, null=True)
image = models.FileField(upload_to='images/', blank=True, null=True)
когда я пытаюсь выполнить миграцию, я получаю эту ошибку:
ValueError: invalid literal for int() with base 10: 'Anonymous'
У меня был user = models.ForeignKey(User, on_delete=models.CASCADE, default="anonymous")
но я удалил его, и ошибка все еще сохраняется
Комментарии:
1. Удаление этого не поможет, поскольку оно уже есть в файле миграции . Таким образом, вам также необходимо удалить файл миграции.
Ответ №1:
Удаление этого не поможет, поскольку оно уже есть в файле миграции. Таким образом, вам также необходимо удалить файл миграции.
Если вы хотите использовать User
с именем пользователя anonymous
, то вы можете использовать вызываемый для этого:
from django.conf import settings
def get_anonymous():
if hasattr(get_anonymous, 'result'):
return get_anonymous.result
from django.contrib.auth import get_user_model
User = get_user_model()
result = get_anonymous.result = User.objects.get(username='Anonymous')
return result
class Tweet(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
default=get_anonymous
)
context = models.TextField(blank=True, null=True)
image = models.FileField(upload_to='images/', blank=True, null=True)
Но это, таким образом, работает только в случае, если есть User
запись с. username='Anonymous'
Если такой записи нет, часто используется NULL
для обозначения отсутствующего пользователя, поэтому:
from django.conf import settings
class Tweet(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
null=True,
default=None
)
context = models.TextField(blank=True, null=True)
image = models.FileField(upload_to='images/', blank=True, null=True)
Примечание: обычно лучше использовать
settings.AUTH_USER_MODEL
[Django-doc] для ссылки на пользовательскую модель, чем использоватьUser
модель [Django-doc] напрямую. Для получения дополнительной информации вы можете ознакомиться с разделом «Ссылки наUser
модель» документации.