Как сделать так, чтобы атрибут автоматически связывался с User? django
Я создаю простой сайт, используя django. Я добавил модель 'Comment', чтобы сделать раздел комментариев к записи в блоге. Я хотел бы вывести каждый из атрибутов 'date_added', 'text' и 'owner' в html.
class User_Comment(models.Model):
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.text
У меня проблемы с атрибутом 'owner'.
owner = models.ForeignKey(User, on_delete=models.CASCADE)
если я пытаюсь сделать миграции с его помощью, Django просит меня указать значение по умолчанию.
It is impossible to change a nullable field 'owner' on user_comment to non-nullable
without providing a default. This is because the database needs something to populate
existing rows.
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for
this column)
2) Ignore for now. Existing rows that contain NULL values will have to be handled
manually, for example with a RunPython or RunSQL operation.
3) Quit and manually define a default value in models.py.
Если я добавляю параметры 'blank=True', 'null=True' к атрибуту onwer, атрибут работает, но он не ассоциируется автоматически с владельцем при добавлении комментария. Поэтому мне приходится заходить в админку, чтобы вручную назначить комментарий его владельцу.
owner = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
Какое лучшее решение для этого? Я бы хотел выводить атрибут 'owner' в html автоматически, без необходимости обрабатывать его вручную... Большое спасибо за ваше время.
Возможно, будет полезно объяснить, что именно здесь произошло.
Вы добавили дополнительное поле, owner, в существующую модель Comment. Поскольку уже было несколько существующих комментариев, процесс миграции (который обновляет понимание Django о модели в базе данных) должен знать, что делать с существующими записями комментариев, которые в настоящее время не имеют владельца.
Это одноразовый процесс, предназначенный исключительно для обработки существующих записей.
Однако, когда вы создаете новый комментарий, вам также необходимо определить, кто является его владельцем, чтобы поле модели заполнялось автоматически. Допустим, у вас есть форма, которая принимает комментарии пользователей, и ваше представление проверяет, публикуется ли комментарий:
form = CommentForm(request.POST or None)
if request.method == "POST" and form.is_valid:
#create an uncommitted version of the form to add fields to
form_uncommitted = form.save(commit=False)
#here we explicitly assign the owner field to the user that made the request
form_uncommitted.owner = request.user
#then save the form data plus our added data
form_uncommitted.save()