Раскрывающийся список в django, заполняемый из столбца таблицы базы данных - PullRequest
2 голосов
/ 30 июня 2011

Я искал то же самое в сети и получил много ответов, но кое-как понять, как работать с любым из них.

Таблица:

  1. Отчет: reportType (внешний ключ из ReportCategory), имя, описание
  2. Категория отчета: название, описание

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 ]

2 голосов
/ 30 июня 2011
reportType = models.CharField(max_length=200)

Должно быть:

reportType = models.ForeignKey(ReportCategory)

Затем в модель ReportCategory добавить:

def __unicode__(self):
    return self.name

Тогда в вашей форме вам не нужно ничего другого

0 голосов
/ 01 июля 2011

В forms.py

class ReportForm_insert(forms.ModelForm):  
    class Meta:  
        model=Report

Вот и все. Django автоматически понимает, что выпадающий список должен быть создан, когда мы объявляем его как внешний ключ в модели.

0 голосов
/ 30 июня 2011

Использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...