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模型表单集显示数据库数据而不是空表单集

Django使用不完整的模型创建一个有效的ModelForm,以在表单验证后手动添加字段

Django:使用TemplateView在Django表单中添加编辑和删除功能的问题

Django 以 JSON 格式返回单个记录

Django:以编程方式/动态创建数据库表

Django 创建数据库表