我正在尝试使用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'中的'null值违反了非空约束',我认为是由于将地址插入数据库之前(postgres)。解决这个问题的正确方法是什么?
答案 0 :(得分:1)
为什么关系设定在地址而不是场地?
除非是故意的要求,否则你可以简单地使地址不是强制性的(空白=真,空=真);我也更喜欢更明确的代码:
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,
)
答案 1 :(得分:0)
更改此行:
venue = models.OneToOneField('clubApp.Venue')
对此:
venue = models.OneToOneField(Venue)