2015-10-16 54 views
0

我想为用户的地点提供charfield,如果它已存在,请使用foreignkey。如果不存在,请创建一条新记录并使用该记录foreignkey。它应该对用户完全透明,charfield选择一个现有的行或创建一个新的行。是否有内置功能,或者是否需要在view.py中创建?Django形成新的外键记录

解决方案:

views.py

place, created = Place.objects.get_or_create(
     street_number = form.cleaned_data['street_number'], 
     route = Route.objects.get_or_create(
      route = form.cleaned_data['route'], 
      neighborhood = Neighborhood.objects.get_or_create(
       neighborhood = form.cleaned_data['neighborhood'], 
       locality = Locality.objects.get_or_create(
        locality = form.cleaned_data['locality'], 
        administrative_area_level_1 = form.cleaned_data['administrative_area_level_1'] 
       )[0] 
      )[0] 
     )[0] 
    ) 

回答

0

它不会是太难的ModelForm做。你只是覆盖ModelForm.save()

def save(self, commit=True): 
    if not commit: 
     raise NotImplementedException('commit=False is not supported yet') 

    super(MyModelForm, self).save(commit=commit) 

    ZipCode.objects.get_or_create(zipcode=self.instance.zipcode) 

    return self.instance 
+0

'get_or_create'是我正在寻找,这将简化我的逻辑,谢谢。现在的问题是如何在验证发生之前应用这个逻辑?现在,如果我提交表格,酥脆给出_选择一个有效的选择。这个选择不是可用的选择之一。另外,你能否在OP中检查'forms.py',并告诉我它是否正确,以及'view.py'中应该包含哪些内容? – dtgq

+0

明白了,谢谢你的提示。用解决方案代码更新OP。 – dtgq