#python #django #inline-formset
#python #django #встроенный набор форм
Вопрос:
У меня есть две модели, соединенные внешним ключом. Одним из них является встроенный набор форм. По какой-то причине идентификаторы набора форм идентифицируются как первичные ключи в базе данных, и каждый раз, когда форма отправляется, таблица, принадлежащая набору форм, в основном перезаписывается. Как мне игнорировать идентификаторы набора форм при сохранении
models.py
class Student(models.Model):
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
email = models.EmailField()
class Courses(models.Model):
student = models.ForeignKey(Student)
course_name = models.CharField(max_length=40)
start_time = models.TimeField()
forms.py
class CoursesForm(forms.ModelForm):
class Meta:
model = Courses
exclude = ("student",)
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = "__all__"
views.py
…
def post(self, request, *args, **kwargs):
sform = StudentForm(request.POST, instance=Student())
CourseSchedule = inlineformset_factory(Student, Courses, form=CoursesForm, can_delete=False, extra=0, min_num=1)
cforms = CourseSchedule(data=request.POST)
if sform.is_valid() and cforms.is_valid():
sform_obj = sform.save()
for cform in cforms.forms:
cform_obj = cform.save(commit=False)
cform_obj.student = sform_obj
cform_obj.save()
....
Комментарии:
1. где связь в ваших моделях
2. сначала создайте
m:m relationship
между двумя таблицами вCourses
моделиstudents = models.ManyToManyField(Student)
3. затем используйте
inline formset
надлежащим образом встроенный4. Это отношение «один ко многим»,
Ответ №1:
Я понял это.. Данные моего набора форм сохранялись после отправки. Мне пришлось объявить пустой набор запросов в basemodelformset.