问题描述
我在Django中有两个与OneToOneField(PrinterProfile和PrinterAdress)相关的模型。我试图用PrinterProfileForm做一个表单,但是由于某些原因,它不会将PrinterAddress字段传递到表单中(它不是由模板中的Djangomagic呈现)。
我应该怎么做,我的PrinterProfileForm还包括PrinterAddress(其相关的OneToOneField)的字段?
非常感谢
class PrinterProfile(TimeStampedModel):
user = models.OneToOneField(User)
phone_number = models.CharField(max_length = 120,null = False,blank = False)
additional_notes = models.TextField()
delivery = models.BooleanField(default = False)
pickup = models.BooleanField(default = True)
#配置文件的主要地址,它将位于所有打印机的位置。
class PrinterAddress(TimeStampedModel):
printer_profile = models.OneToOneField(PrinterProfile)
formatted_address = models.CharField(max_length = 200,null = True)
latitude = models.DecimalField max_digits = 25,decimal_places = 20)#需要检查所需的精度。
longitude = models.DecimalField(max_digits = 25,decimal_places = 20)#需要检查这里需要的精度。
point = models.PointField(srid = 4326)
def __unicode __(self,):
return self.user.username
class PrinterProfileForm form.ModelForm):
class Meta:
model = PrinterProfile
exclude = ['user']
您必须为 PrinterAddress
创建第二个表单,并在您的视图中处理这两个表单:如果全部((profile_form.is_valid(),address_form.is_valid())):
profile = profile_form.save )
address = address_form.save(commit = False)
address.printer_profile = profile
address.save()
当然,在模板中,您需要在一个< form>
标签之间显示两个表单: - )
< form action =method =post>
{%csrf_token%}
{{profile_form}}
{{address_form}}
< / form>
I have two models in Django that are related with a OneToOneField (PrinterProfile and PrinterAdress).I am trying to do a form with PrinterProfileForm, but for some reason it does NOT pass the PrinterAddress fields into the form (it's not rendered by Django "magic" in the template).
What should I do so that my PrinterProfileForm include as well the fields from PrinterAddress (its related OneToOneField)?
Thanks a lot
class PrinterProfile(TimeStampedModel):
user = models.OneToOneField(User)
phone_number = models.CharField(max_length=120, null=False, blank=False)
additional_notes = models.TextField()
delivery = models.BooleanField(default=False)
pickup = models.BooleanField(default=True)
# The main address of the profile, it will be where are located all the printers.
class PrinterAddress(TimeStampedModel):
printer_profile = models.OneToOneField(PrinterProfile)
formatted_address = models.CharField(max_length=200, null=True)
latitude = models.DecimalField(max_digits=25, decimal_places=20) # NEED TO CHECK HERE THE PRECISION NEEDED.
longitude = models.DecimalField(max_digits=25, decimal_places=20) # NEED TO CHECK HERE THE PRECISION NEEDED.
point = models.PointField(srid=4326)
def __unicode__(self, ):
return self.user.username
class PrinterProfileForm(forms.ModelForm):
class Meta:
model = PrinterProfile
exclude = ['user']
You have to create second form for PrinterAddress
and handle both forms in you view:
if all((profile_form.is_valid(), address_form.is_valid())):
profile = profile_form.save()
address = address_form.save(commit=False)
address.printer_profile = profile
address.save()
Of course in the template you need to show both forms under one <form>
tag :-)
<form action="" method="post">
{% csrf_token %}
{{ profile_form }}
{{ address_form }}
</form>
这篇关于ModelForm与Django中的OneToOneField的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!