Django - ограничение ModelChoiceField действительными значениями - PullRequest
0 голосов
/ 01 июня 2011

Models.py:

class Comment(models.Model):
    user = models.ForeignKey(User)
    document = models.ForeignKey(Document)
    section = models.ForeignKey(Section, null=True, blank=True)
    description = models.TextField(null=True, blank=True)

Forms.py:

class CommentForm(ModelForm):
    class Meta:
        model = Comment
        fields = ('section', 'description')

Каждый комментарий относится к разделу документа.Каждый документ имеет множество разделов.Тем не менее, ModelChoiceField, распечатанный Django, будет содержать разделы для ВСЕХ документов.

Как сказать Django печатать только разделы, которые принадлежат определенному документу?ModelFormSets - изменение набора запросов , но я не думаю, что это именно то, что мне нужно.

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Если все, что вам нужно сделать, это настроить сайт администратора, вы можете переопределить метод formfield_for_foreignkey в вашем классе администрирования django.

Из документов:

ModelAdmin.formfield_for_foreignkey (self, db_field, request, ** kwargs)

Метод formfield_for_foreignkey в ModelAdmin позволяет переопределить поле формы по умолчанию для поля внешнего ключа.Например, чтобы вернуть подмножество объектов для этого поля внешнего ключа на основе пользователя:

class MyModelAdmin(admin.ModelAdmin):
     def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "car":
            kwargs["queryset"] = Car.objects.filter(owner=request.user)
        return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

При этом экземпляр HttpRequest используется для фильтрации поля внешнего ключа Car, чтобы отображать толькоавтомобили, принадлежащие экземпляру пользователя.

1 голос
/ 01 июня 2011

Я думаю, вы хотите изменить набор запросов ModelChoiceField , а не набор запросов из набора форм.

...