我有基本的html表单与2个领域(电子邮件和电话)。我有3个型号:
models.py
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中
/imports/
def home(request):
context = {'users': Person.object.all()}
return render(request,'app/home.html',context)
和我的home.html
{% 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,但我尝试在没有它的情况下做到这一点。有没有简单的方法来解决这个问题?
发布于 2019-06-11 03:02:17
使用ModelForm创建表单。然后,如果您想要添加、更新或删除phone
或email
,您可以使用formset_factory.在其他视图中执行此操作我建议这样做。
forms.py
from yourapp.models import Person, Email, Phone
from django.forms impot ModelForm
class EmailForm(ModelForm):
class Meta:
model = Person
fields = '__all__'
views.py
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
https://stackoverflow.com/questions/56531777
复制相似问题