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)
Вернуться на верх