繁体   English   中英

Django Postgres完整性错误

[英]Django Postgres Integrity Error

我正在django中创建一些模型来代表新闻文章,其作者以及每篇文章的地理重点。 我需要文章和作者之间存在多对多关系,并且文章和位置之间需要一对多的关系,其中每个位置可以包含多个文章,反之亦然。 我尝试了各种方法,但是每次在Django中运行迁移时,都会出现以下错误:

django.db.utils.ProgrammingError: multiple default values specified for column "id" of table "location"

生成表的代码如下:

from django.contrib.gis.db import models

class Article(models.Model):
    article_id = models.AutoField(primary_key=True)
    article_title = models.CharField(max_length=200, unique_for_date="pub_date")
    pub_date = models.DateTimeField('date published')
    article_summary = models.TextField()
    title_id = models.CharField(max_length=200)
    section_id = models.CharField(max_length=200)

    def __unicode__(self):
        return u'%s %s' % (self.article_title, self.pub_date)        
    class Meta:
        db_table = 'article'


class Author(models.Model):
    author_id = models.AutoField(primary_key=True)
    articles = models.ManyToManyField(Article)
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)

    def __unicode__(self):
        return u'%s %s %s' % (self.articles, self.first_name, self.last_name)   

    class Meta:
        db_table = 'author'

class Location(models.Model):
    location_id = models.AutoField(primary_key=True)
    lat = models.FloatField()
    lon = models.FloatField()
    local = models.CharField(max_length=200)
    city = models.CharField(max_length=200)
    region = models.CharField(max_length=200)
    country = models.CharField(max_length=200)
    continent = models.CharField(max_length=200)
    article = models.ForeignKey(Article, default=0)

    def __unicode__(self):
        return u'%s %s %s' % (self.location_id, self.lat, self.lon)

    class Meta:
        db_table = 'location'

我以为这是相对简单的事情,但是过去几天我一直都没想到。 让我知道您是否需要更多信息。

这是我现在正在使用的模型代码,但是仍然存在上述相同的问题:

from django.contrib.gis.db import models

class Author(models.Model):
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)

    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)          
    class Meta:
        db_table = 'author'


class Location(models.Model):
    lat = models.FloatField()
    lon = models.FloatField()
    local = models.CharField(max_length=200)
    city = models.CharField(max_length=200)
    region = models.CharField(max_length=200)
    country = models.CharField(max_length=200)
    continent = models.CharField(max_length=200)

    def __unicode__(self):
        return u'%s %s' % (self.lat, self.lon)       
    class Meta:
        db_table = 'location'


class Article(models.Model):
    authors = models.ManyToManyField(Author)
    location = models.ForeignKey(Location)
    article_title = models.CharField(max_length=200, unique_for_date="pub_date")
    pub_date = models.DateTimeField('date published')
    article_summary = models.TextField()
    title_id = models.CharField(max_length=200)
    section_id = models.CharField(max_length=200)

    def __unicode__(self):
        return u'%s %s' % (self.article_title, self.pub_date)        
    class Meta:
        db_table = 'article'

如果一篇文章可以有很多作者和一个位置,那么您需要的是与作者的多对多关系和具有位置的外键。

class Article(models.Model):
    article_id = models.AutoField(primary_key=True)
    authors = models.ManytoManyField(Author)
    location = models.ForeignKey(Location)
    article_title = models.CharField(max_length=200, unique_for_date="pub_date")
    pub_date = models.DateTimeField('date published')
    article_summary = models.TextField()
    title_id = models.CharField(max_length=200)
    section_id = models.CharField(max_length=200)

您不需要位置中的文章ID。

class Location(models.Model):
    location_id = models.AutoField(primary_key=True)
    lat = models.FloatField()
    lon = models.FloatField()
    local = models.CharField(max_length=200)
    city = models.CharField(max_length=200)
    region = models.CharField(max_length=200)
    country = models.CharField(max_length=200)
    continent = models.CharField(max_length=200)

还值得注意的是,除非您不希望为模型id使用简单的整数,否则不必为模型创建id(它们是自动创建的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM