您好我有两个相关模型,我需要保存它取决于Angular的json数据 这是模特:
Class Company(models.Model):
name = models.CharField(
max_length=255, )
class ContactPerson(models.Model):
company = models.ForeignKey(
Company,
related_name='contact_persons', )
name = models.CharField(
max_length=255, )
以下是观点的一部分:
class CompanyCreate(JsonView):
#JsonView write by me, contains some methods
def post(self, *args, **kwargs):
data = json.loads(self.request.body)
company = CompanyForm(data=data['company'])
contacts = ContactForm(data=data['contacts'])
if company.is_valid():
company.save()
if contacts.is_valid():
contacts.save(commit=False)
contacts.company = company
contacts.save()
return HttpResponse()
公司正在保存,但我无法通过有效的联系表单,因为我无法从第一个表单中获取company.id
。
答案 0 :(得分:2)
我认为你不能立刻保存它们,因为:
它们是具有外键关系的实例,因此在另一个之前不存在。
它们是3个不同的模型实例,因此将它们组合在一个表单中是没有意义的。
如果您只想保存有效的那些并拒绝无效的那些,那么您目前所做的就是一次更改就足够了,捕获save()
函数的返回值:
class CompanyCreate(JsonView):
#JsonView write by me, contains some methods
def post(self, *args, **kwargs):
data = json.loads(self.request.body)
company_form = CompanyForm(data=data['company'])
contacts_form = ContactForm(data=data['contacts'])
if company_form.is_valid():
company = company_form.save()
if contacts.is_valid():
contacts = contacts_form.save(commit=False)
contacts.company = company
contacts.save()
return HttpResponse()
如果您想要“全部或全部”逻辑,这意味着如果一切都有效则保存所有内容,否则不保存任何内容,您应该排除每个ModelForm
上的外键,以便在您有效时表单,他们忽略了ForeignKey存在的验证,但没有忽略所有其他字段。看看是否有意义。