Форум сайта python.su
Добрый всем день.
Есть модель Order с несколькими полями, одно из полей - dealer - внешний ключ на модель Dealer. У дилера есть, в частности, поле email.
Для модели Order создается форма с помощью form_for_instance, поле dealer в ней отображается выпадающим списком, и все хорошо, все работает.
class Dealer(models.Model): name = models.CharField(maxlength=40, unique=True) email = models.EmailField(blank=True, null = True) ... class Order(models.Model): ... # Такой limit_choices_to не фильтрует dealer = models.ForeignKey(Dealer, limit_choices_to = {'email__contains': '@'}) ...
def field_callback(field, **kwargs): if field.name == 'dealer': return forms.ChoiceField(label=u'Select a Dealer', choices = field.get_choices(True), **kwargs) else: return field.formfield(**kwargs)
Офлайн
У меня так:
def form_for_model_with_data( model, fields, data ): def _field_callback( field ): if field.name in data: queryset = data[ field.name ] return field.formfield( queryset = queryset ) else: return field.formfield() return form_for_model( model, fields = fields, formfield_callback = _field_callback ) Form = form_for_model_with_data( Order, { 'dealer' : Dealer.objects.filter( email__isnull = False ) } )
Офлайн