我在网上搜索了同样的东西并得到了很多答案,但有些人如何与他们合作。
表:
forms.py
class ReportForm_insert(forms.ModelForm):
class Meta:
model=Report
invent = ReportCategory.objects.all()
print invent
reportType_id = forms.ModelMultipleChoiceField(queryset = invent)
fields =('name','description',)
model.py
class ReportCategory(models.Model):
name = models.CharField(max_length=20)
description = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Report(models.Model):
reportType = models.ForeignKey(ReportCategory)
name = models.CharField(max_length=200)
description = models.CharField(max_length=300)
def __unicode__(self):
return self.name
现在,在元类中我试图做两件事:
首先,使用值填充“报告类型”下拉框 ReportCategory表的“名称”列。 其次,当用户填写表单中的所有其他字段时 按下按钮,应保存字段中的数据 报告表记住它具有的外键约束 来自ReportCategory表。
答案 0 :(得分:2)
reportType = models.CharField(max_length=200)
应该是:
reportType = models.ForeignKey(ReportCategory)
然后在ReportCategory模型上添加:
def __unicode__(self):
return self.name
然后在您的表单上,您不需要任何其他东西
答案 1 :(得分:0)
使用InlineFormsets。
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=100)
>>> from django.forms.models import inlineformset_factory
>>> BookFormSet = inlineformset_factory(Author, Book)
>>> author = Author.objects.get(name=u'Mike Royko')
>>> formset = BookFormSet(instance=author)
答案 2 :(得分:0)
在 forms.py
中class ReportForm_insert(forms.ModelForm):
class Meta:
model=Report
就是这样。 Django自动理解当我们在模型中将其声明为外键时必须创建下拉列表。