django中的下拉框从数据库表列填充

时间:2011-06-30 00:54:17

标签: django

我在网上搜索了同样的东西并得到了很多答案,但有些人如何与他们合作。

表:

  1. 报告:reportType(来自ReportCategory的外键),名称,描述
  2. 报告类别:名称,描述
  3. 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表。

3 个答案:

答案 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自动理解当我们在模型中将其声明为外键时必须创建下拉列表。