Django: unable to save model - Err: "id" ожидал число, но получил <django.db.models.fields.related.ForeignKey...>.
У меня нет идей, я перепробовал все.
В основном я просто пытаюсь сохранить некоторый элемент, где owner
является внешним ключом, связанным со стандартной моделью Django User
. Эти же методы работают для других представлений и моделей, где ассоциация идентична. Но здесь я получаю эту ошибку:
Exception Type: TypeError
Exception Value:
Field 'id' expected a number but got <django.db.models.fields.related.ForeignKey: owner>.
Это моя модель:
class User(AbstractUser):
pass
""" ... """
class Item(TimeStampMixin):
title = models.CharField(max_length=40)
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="Items")
etc=etc...
Вот мое мнение:
class Form_New_Item(ModelForm):
class Meta:
model = Item
fields = ['title', 'description', 'price', 'category', 'image_url']
def create_new_item(request):
if request.user.is_authenticated and request.method == "POST":
form = Form_New_Item(request.POST)
user = request.user
if form.is_valid():
new_item = Item(
owner=user,
title=form.cleaned_data['title'],
ecc=ecc,
)
new_item.save()
return HttpResponseRedirect(reverse("index"))
Заметьте, что ошибка происходит, когда я вызываю new_item.save()
:
Заранее благодарю вас за любую помощь, которую вы можете мне оказать.
Я только что решил это, я должен был предоставить весь класс Item на примере, извините за это (я просто отредактировал первое сообщение), теперь я вижу более ясно, где была ошибка:
У меня есть свойство класса, которое зависит от другого свойства.
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="listings")
last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", default=owner)
Так вы видите, что второе свойство last_bidder
имеет по умолчанию первое owner
.
Несмотря на то, что ошибка, о которой сообщает Django, похоже, касается owner
свойства, проблема была на last_bidder
одном.
Я решил эту проблему, установив null=True
вместо дефолта первое свойство:
last_bidder = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="bidded_objects", null=True)