Я тестирую формы и вложение моделей в django.
Из-за отношения ManyToMany в моей форме мне нужно использовать пользовательскую функцию сохранения.Пока это работает.Но я спросил себя, есть ли способ сократить код?Так вот мой мой ...
forms.py
GuestForm(forms.ModelForm):
dish = forms.ModelChoiceField(queryset=None)
# --- Input for meal.table
table_input = forms.IntegerField(widget=forms.NumberInput)
class Meta:
model = Guest
fields = [
'name',
'dish',
'table_input',
'city',
'department'
]
# --- Dish names from dish.model
def __init__(self, *args, **kwargs):
super(GuestForm, self).__init__(*args, **kwargs)
self.fields['dish'].queryset = Dish.objects.all()
def save(self):
# --- save the new Meal.object
data = self.cleaned_data
mealData = Meal(table=data['table_input'], dish=data['dish'])
mealData.save()
# --- save the new Guest.object
guestData = Guest(name=data['name'], city=data['city'], department=data['department'])
guestData.save()
# --- add a m2m relation between Guest.object and Meal.object
guestData.meals.add(mealData)
guestData.save()
return guestData
Вопрос
Мой вопрос особенно связан с отображением всех полей после того, как я сохранил mealData.save()
.
# --- save the new Guest.object
guestData = Guest(name=data['name'], city=data['city'], department=data['department'])
guestData.save()
Потому что в больших проектах это может означать большую работу, чтобы впоследствии сопоставить каждое поле только потому, что мне нужно было table
и dish
для сохранения в дополнительной модели.Или, другими словами, есть какой-то метод выбора?Что-то вроде «все поля данных, все еще относящиеся к Meta: model = Guest
минус данные из mealData
»?Я не знаю, может быть, что-то вроде этого?
# --- Select all other fields and save the new Guest.object
guestData = Guest.minus(guestData)
guestData.save()