У меня есть следующая форма:
класс 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()
На мой взгляд, я хочу условно сохранить либо место, либо ресторан в зависимости от входящего URL-адреса.
Я пробовал следующее:
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")
Это говорит мне, что пытается вставить новую строку для нового места, а затем строку ресторана.
Я вижу несколько разных вариантов:
- Преобразуйте место в ресторан и сохраните дополнение к преобразованному объекту.
- Условно измените тип модели формы на «Место» или «Ресторан».
Как я могу выполнить условное сохранение различных родительских и дочерних объектов?