我有以下表格:
类PlaceForm(forms.ModelForm):
class Meta:
model = Place
我有以下型号:
class Place(models.Model):
customer = models.ForeignKey(Customer)
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField()
serves_pizza = models.BooleanField()
在我看来,我想根据收到的网址有条件地保存一个地方或一个餐馆。
我尝试了以下内容:
if form.is_valid():
place = form.save(commit=False)
place.customer = customer
place.save()
if url_name == 'restaurant':
restaurant = Restaurant(place_ptr_id=place.id)
restaurant.save()
这会从表单中创建一个位置,然后尝试创建一个餐馆,但会失败并显示以下内容:(1048, "Column 'customer_id' cannot be null")
这告诉我,新地方的新行正在尝试插入,然后是餐馆排。
我看到了几个不同的选择:
如何有条件地完成保存不同的父对象和子对象?
答案 0 :(得分:1)
它与Django model inheritance: create sub-instance of existing instance (downcast)?有关,它建议如何使用现有的基类对象添加对象。
您可能需要查看我的问题:Derived model filefield not available
简而言之,你要做的是
restaurant = Restaurant(place_ptr_id=place.id)
restaurant.__dict__.update(place.__dict__)
restaurant.save()
答案 1 :(得分:0)
您可以添加null=True
和blank=True
。
模型:
class Place(models.Model):
customer = models.ForeignKey(Customer, null=True, blank=True)
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)