나는 일부 모델은 GenericForeignKey
와 연결 한 :장고 형태
Class Main(models.Model)
filed_1 = models.CharField(max_length=20)
object_id = models.PositiveIntegerField()
content_type = models.ForeignKey(ContentType)
object = generic.GenericForeignKey('content_type', 'object_id')
Class Additional_1(models.Model):
f_1 = models.CharField(max_length=20)
f_2 = models.CharField(max_length=20)
Class Additional_2(models.Model):
d_1 = models.CharField(max_length=20)
d_2 = models.CharField(max_length=20)
그리고 형태를이 모델 : MainForm
의 필드로 구성 형태를 만드는 방법
Class MainForm(forms.ModelForm):
class Meta:
model = Main
fields = ('filed_1', 'object_id', 'content_type')
widgets = {
'object_id': forms.HiddenInput,
'content_type': forms.HiddenInput
}
Class Additional_1Form(forms.ModelForm):
class Meta:
model = Additional_1
fields = ('f1', 'f2')
Class Additional_2Form(forms.ModelForm):
class Meta:
model = Additional_2
fields = ('d1', 'd2')
+1 Additional_iForm
을 하나의 제출 양식 버튼 (MainForm
+ Additional_1Form
및 Main
+ Additional_2Form
)으로 만들고 올바른 작성과 편집을 제공하십시오. ForeignKey
인라인 formset 같은 표준 장고 구성 요소를 사용하여 그것을 할 방법이 있습니까?
P. 이 질문에 대한 대답은 문서의이 섹션에 포함되어야한다고 생각하지만 대답 할 정보가 너무 적습니다. https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#generic-relations-in-forms-and-admin
EDITION # 1
# This is always false, because of 'object_id' in main_form
if main_form.is_valid() and additional_1_form.is_valid():
additional = additional_1_form.save()
main_form.object_id = additional .id # I need something like this to set object_id
main_form.save()
고맙지 만 모델을 만들고 편집하는 방법은 무엇입니까? 내가 먼저 추가 양식을 저장 한 다음 저장된 모델을 기본 양식으로 전달하여 "일반 관계"를 통해 모델을 묶어야합니다. – Deadly
@Deadly : 왜 모델을 다시 양식에 전달 하시겠습니까? 세 가지 양식의 정보가 모두 유효하고 백엔드에서 올바른 저장 작업을 수행 할 수 있습니다 (if 문 다음에'pass'가있는 곳). –
'MainForm'을 저장하기 때문에'object_id' 필드를 알아야합니다. 추가 모델을 저장 한 후에 만 알 수 있습니다 (pk). 그리고 또 다른 문제가 있습니다 :'MainForm'은 항상 유효하지 않습니다.'object_id' 필드는 추가 모델을 저장하기 전에 알려지지 않았기 때문에,'MainForm.fields' 튜플에 필요하기 때문에'MainForm.save' 메소드가 올바르게 작동합니다. 질문에보기 코드를 추가하고 MainForm 클래스를 편집했습니다. – Deadly