Автоматическое поле ID, возвращающее 'None' в Django

Здравствуйте, я новичок в Django, пытаюсь создать программу, которая будет сохранять модель с некоторыми входными данными.

(В конечном итоге я буду использовать форму для этого ввода, но request.POST будет содержать вещи, которые я хочу отправить в несколько разных мест, поэтому я не могу просто использовать ModelForm)

Вот код для модели:

class Bid(models.Model):
    bid_owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="owner")
    bid_value = models.DecimalField(max_digits=6, decimal_places=2)
    bid_no = models.IntegerField(default=0, null = True, blank=True)
    bid_open = models.BooleanField(default=True, null = True, blank=True)
    bid_winner = models.ForeignKey(User, blank=True, default="None", null=True, on_delete=models.CASCADE, related_name="winner")

    def __str__(self):
        return f"My ID is {self.id} and this is {self.bid_owner}'s listing"

и вот код, который я вызываю в файле views.py:

def bar(request):

foo = Bid(bid_owner = request.user, bid_value = 25)
foo.save()

Но он продолжает выдавать ошибку "Field 'id' expected a number but got None".

Из документации, которую я видел, содержимое поля id должно автоматически генерироваться при сохранении, поэтому я в растерянности, как решить эту проблему. При создании HttpResponse, показывающего содержимое 'foo', все работает, кроме id. Я также могу создать новый Bid, используя admin

Проблема заключается в default значении в bid_winner поле.

Вы пытаетесь создать запись Bid без передачи bid_winner. Поэтому при сохранении объекта Bid django пытается заполнить колонку bid_winner значением по умолчанию, которое равно None.

Но django ожидает найти id в этом, потому что bid_winner это ForeignKey

Поэтому omit default value of bid_winner, чтобы исправить это. Поскольку вы объявили null=True, он будет None, если вы ничего ему не передадите

Вернуться на верх