Django:创建表单以添加相关数据
Posted
技术标签:
【中文标题】Django:创建表单以添加相关数据【英文标题】:Django: Creating form to add related data 【发布时间】:2019-06-05 10:17:39 【问题描述】:我无法理解 Django 中的 ORM。 我有 3 个模型,其中 2 个首先用作 FK。 我想创建允许我添加相关数据的按钮/表单。
我的models.py
*imports*
class PersonManager(models.Manager):
def get_by_natural_key(self,name,surname):
return self.get(name=name,surname=surname)
class Person(models.Model):
name = models.CharField(attributes)
surname = models.CharField(attributes)
objects = PersonManager()
class Phone(models.Model):
person = models.ForeignKey(Person.editable=False,on_delete=models.CASCADE)
phone = model.CharField(attributes)
class Email(models.Model):
person = models.ForeignKey(Person,editable=False,on_delete=models.CASCADE)
email - models.EmailField()
我有用于将人员添加到数据库的表单,现在我想在每个对象人员附近添加按钮,这将允许我填写电话和电子邮件,但老实说,我不知道我可以通过哪种方式连接他们在一起
编辑:
更具体一点:
我的views.py
*imports*
class PersonListView(ListView):
model = Person
template_name = 'app/home.html'
context_object_name = 'users' //(in my home method it returns person from db)
现在,靠近我要添加的每个对象的按钮,这将允许我填写电子邮件
我的home.html:
% extends "app/base.html" %
% block content %
% for user in users %
id user.id name: user.name surname: user.surname
% endfor %
% endblock content %
【问题讨论】:
你的问题不清楚。保存它们时将它们连接在一起。您应该出示表格并查看并说明您遇到问题的地方。 @DanielRoseman 已编辑,希望现在更清楚 【参考方案1】:我认为您可以使用相关名称来获取这样的关系字段:
class Email(models.Model):
person= models.OneToOneField(User,on_delete=models.CASCADE,related_name="E_person")
email - models.EmailField()
当您想先在视图中保存此字段时,您可以从 person 类创建对象,如下所示:
obj = person.objects.create(name="mrX",surname="mrXIII")
并用于保存电子邮件:
obj.E_person.email = "mrX@gmail.com"
obj.save()
我可以帮到你。
【讨论】:
以上是关于Django:创建表单以添加相关数据的主要内容,如果未能解决你的问题,请参考以下文章
Django使用不完整的模型创建一个有效的ModelForm,以在表单验证后手动添加字段