Миграция приложений Django

#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 модель» документации.