Автоматическое поле 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
, если вы ничего ему не передадите