我有一个名为Company的模型:
class Company(TimeStampedModel):
company_id = models.CharField(max_length=20, unique=True)
legal_name = models.CharField(max_length=200)
trading_name = models.CharField(max_length=200, unique=True)
# address
address = models.CharField(max_length=200, null=True, blank=True)
city = models.CharField(max_length=200, null=True, blank=True)
state = models.CharField(max_length=200, null=True, blank=True)
zipcode = models.CharField(max_length=200, null=True, blank=True)
# contact details
email = models.EmailField(max_length=200, null=True, blank=True)
phone = models.CharField(max_length=200, null=True, blank=True)
其他模型是CompanyAttributes:
class CompanyAttributes(TimeStampedModel):
""" All attributes of company"""
corporate = models.ForeignKey(Company)
key = models.CharField(max_length=100)
value = models.TextField(max_length=100)
对于特定公司,我可以拥有许多属性,如帐单邮寄地址,CIN,GSTIN,帐号 我通过将所有字段定义为表单字段来显示单个表单中的所有字段,现在我想一次性保存所有字段。一种方法是覆盖ModelAdmin的save_model并逐个保存每个属性。 有没有办法使用save_related或其他方法,以便我可以一次性保存。
我的模特
class CompanyModelForm(ModelForm):
pan_number = CharField()
cin_number = CharField()
gstin_number = CharField()
account_number = CharField()
def __init__(self, *args, **kwargs):
super(CorporateModelForm, self).__init__(*args, **kwargs)
self.fields['zipcode'].required = True
self.fields['email'].required = True
self.fields['phone'].required = True
self.fields['cin_number'].required = True
self.fields['gstin_number'].required = True
obj = kwargs.get('instance')
if obj:
self.fields['email'].widget.attrs['disabled'] = 'disabled'
class CompanyAdmin(admin.ModelAdmin):
form = CompanyModelForm
search_fields = ['company_id', 'legal_name', 'trading_name', 'address','city', 'state', 'zipcode', 'email', 'phone']
list_display = ['id', 'legal_name', 'trading_name', 'address', 'city', 'state', 'zipcode', 'email', 'phone']
readonly_fields = []
答案 0 :(得分:1)
这将为你做。
class CompanyAttributesInline(admin.StackedInline):
model = CompanyAttributes
class CompanyAdmin(admin.ModelAdmin):
...
inlines = (CompanyAttributesInline,)