gpt4 book ai didi

python - 一对一字段在通过管理员插入时导致完整性错误

转载 作者:行者123 更新时间:2023-11-29 13:33:28 26 4
gpt4 key购买 nike

我正在尝试使用 django 管理界面以单一形式插入地点和地址(1:1 映射)。

在我的模型中:

class Venue(models.Model):
name = models.CharField(max_length=50)

def __unicode__(self):
return self.name


class Address(models.Model):
states = {
...
}
countries = {
...
}
venue = models.OneToOneField('clubApp.Venue')
address_line1 = models.CharField("Address line 1", max_length=50)
address_line2 = models.CharField("Address line 2", max_length=50, blank=True)
suburb = models.CharField("Suburb", max_length=40)
state = models.CharField(max_length=3, choices=states)
country = models.CharField(max_length=9, choices=countries)

def __unicode__(self):
return "%s %s, %s, %s, %s" % (self.address_line1, self.address_line2, self.suburb, self.state, self.country)

在我的 admin.py 中:

class AddressInline(admin.StackedInline):
model = Address


class VenueAdmin(admin.ModelAdmin):
inlines = [
AddressInline
]

admin.site.register(Venue, VenueAdmin)

当我插入时出现完整性错误,“address_id”列中的“空值违反了非空约束”,我认为这是由于在地址之前将地点插入数据库 (postgres)。解决这个问题的正确方法是什么?

最佳答案

为什么关系设置在地址而不是 field ?

除非是有意要求,否则您可以简单地使地址不是强制性的(blank=True,null=True);我也更喜欢更明确的代码:

In address:

venue = models.OneToOneField(
to=Address,
to_field='id',
related_name='address',
blank=True,
null=True,
)

对我来说,在 Venue 中设置它更有意义(您不需要在两个模型中都声明它):

address = models.OneToOneField(
to=Venue,
to_field='id',
related_name='venue',
blank=True,
null=True,
)

关于python - 一对一字段在通过管理员插入时导致完整性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com