首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django:从字段中获取数据,并插入到与用户相关的2个表中

Django:从字段中获取数据,并插入到与用户相关的2个表中
EN

Stack Overflow用户
提问于 2019-06-11 02:33:57
回答 1查看 493关注 0票数 0

我有基本的html表单与2个领域(电子邮件和电话)。我有3个型号:

models.py

代码语言:javascript
复制
class Person(models.Model):
    name = models.CharField()
    surname = models.Charfield()

class Email(models.Model):
    person = models.ForeignKey(Person,editable=False,on_delete=models.CASCADE)
    email = model.EmailField()

class Phone(models.Model):
    person = models.ForeignKey(Person,editable=False,on_delete=models.CASCADE)
    phone = models.CharField()

在my views.py

代码语言:javascript
复制
/imports/

def home(request):
    context = {'users': Person.object.all()}
    return render(request,'app/home.html',context)

和我的home.html

代码语言:javascript
复制
{% block content %}
{% for user in users %}
Displaying user's attributes

{% for email in user.email_set.all %}
{{ email }}

{% endfor %}
<form method="POST">
<input type="email">
<input type="label">
<button type="submit">Add data</button>
</form>
{% endfor %}
{% endblock content %}

所以在点击按钮后,我想从字段中获取数据,并将它们添加到我的数据库中的2个表中,这些数据必须与被点击的用户相关。我知道我应该使用forms.py,但我尝试在没有它的情况下做到这一点。有没有简单的方法来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-06-11 03:02:17

使用ModelForm创建表单。然后,如果您想要添加、更新或删除phoneemail,您可以使用formset_factory.在其他视图中执行此操作我建议这样做。

forms.py

代码语言:javascript
复制
from yourapp.models import Person, Email, Phone
from django.forms impot ModelForm


class EmailForm(ModelForm):
    class Meta:
        model = Person
        fields = '__all__'

views.py

代码语言:javascript
复制
from django.forms import formset_factory


def view_to_update_person_data(request, pk):
    person = get_object_or_404(Person, pk)
    email_formset = model_factory(EmailForm, extra=2)
    for email in person.email_set.all():
        email_formset = email_formset(initial=[{'person': email}]

    if request.method == 'POST':
        # you can proceed one formset by one
        if email_formset.is_valid():
            instances = email_formset.save(commit=false)
            for i in instances:
                i.person = person
                i.save()

    ctx = {'email_formset': email_formset,
           'phone_form': phone_form,
    }
    return TemplateResponse(request, 'your/template/html', ctx)

请参见how to use formset in working with forms page

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56531777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档