Django view возвращает идентификатор модели только что созданного экземпляра - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть простой сценарий, пытающийся получить id / pk экземпляра модели, созданного в представлении. Экземпляр модели создается нормально, однако id / pk возвращает «None». Я думал, что следую коду, изложенному в последней документации , но, должно быть, я что-то не так делаю.

Models.py

class Userdownloads(models.Model):
    id = models.IntegerField(primary_key=True)
    created_by = models.ForeignKey(User,on_delete=models.DO_NOTHING, related_name='Download_created_by',null=True,blank=True)
    created_date = models.DateTimeField(auto_now_add=True)

Views.py

d = Userdownloads(created_by=request.user)
d.save()
print(d.id)

Я пробовал оба d.id и d.pk

Кто-нибудь может помочь мне увидеть, где я иду не так? Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Вам не нужно указывать идентификатор на моделях django, потому что он будет создан автоматически для вас.

class Userdownloads(models.Model):
    created_by = models.ForeignKey(User,on_delete=models.DO_NOTHING, related_name='Download_created_by',null=True,blank=True)
    created_date = models.DateTimeField(auto_now_add=True)

Вот ссылка на модель

Если он дает None, он еще не был сохранен в базе данных.

0 голосов
/ 07 ноября 2018

При вызове сохранения в данном примере должна появиться ошибка, подобная этой:

значение NULL в столбце "id" нарушает ненулевое ограничение

Итак, здесь поле id должно быть AutoField . Например:

id = models.AutoField(primary_key=True)

Из документации

AutoField

IntegerField, который автоматически увеличивается в соответствии с доступными идентификаторами. Вам обычно не нужно использовать это напрямую; первичный поле ключа будет автоматически добавлено в вашу модель, если вы не указать иначе

...