【问题标题】:Django : Primary Key is getting null valueDjango:主键正在获取空值
【发布时间】:2018-01-17 19:54:50
【问题描述】:

考虑以下模型:

from django.db import models


class Album(models.Model):
    id = models.IntegerField(primary_key=True,null=False)
    artist = models.CharField(max_length=200)
    album_title = models.CharField(max_length = 250)
    genre = models.CharField(max_length=100)
    album_logo = models.CharField(max_length = 200)

    def __str__(self):
        return "id = " + str(self.id) + " artist = " + self.artist + " album = " + self.album_title + " genre = " + self.genre 

class Song(models.Model):
    id = models.IntegerField(primary_key=True)
    album = models.ForeignKey(Album,on_delete=models.CASCADE)
    file_type = models.CharField(max_length = 200)
    song_title = models.CharField(max_length = 200)

    def __str__(self):
        return "id = " + str(self.id) + "album = " + self.album.album_title + "song = " + self.song_title

当我使用位置参数在专辑或歌曲中插入一行而不给出时,django 为该特定行提供 NULL。为什么会这样?

【问题讨论】:

    标签: django python-3.x django-models sqlite


    【解决方案1】:

    首先,不需要显式声明一个名为“id”的字段,因为 Django 已经默认为每个模型创建了一个 id 字段并自动递增它。

    无论如何,如果你想特意声明一个主键,建议按照以下方式进行:

    id = models.AutoField(primary_key=True)

    这是一个自动递增的主键。

    参考官方 Django 文档: https://docs.djangoproject.com/en/1.11/topics/db/models/#automatic-primary-key-fields

    【讨论】:

    • 最初我没有给出任何 id 列。但那个时候也没有工作。这就是我这样做的原因。
    • 您可以像这样在过滤器中访问模型的默认主键:Album.objects.get(pk=1) 希望这可以澄清:)
    猜你喜欢
    • 2016-12-20
    • 2010-10-18
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多