Finally, I'm starting to see some light and it is almost working.

>From what I see I reckon you will need to create both a custom field and a
> custom widget!
>
> I think so because if you have TextInputs validation may fail on the
> ModelMultipleChoiceField?
>

Yes, they do,  because it checks that the value is a pk
on the related table (attribute in this case)

I would think you need to override the methods: __init__, clean, to_python
> and compress.
>
>

With __init__ and clean is enough


> I think you will also need to create a more customized widget inheriting
> directly from MultiWidget?
> I think you would need to override the methods: __init__, render,
> decompress
>

Yes also,


>
> But I'm no expert ;-(
>
>
Well, you are closer than I am :)

Thanks for the help.


>
> On Sun, Aug 26, 2012 at 7:42 PM, Nicolas Emiliani <or3s...@gmail.com>wrote:
>
>> Hi,
>>
>> I've been struggling with this for the past two weeks, and i think it's
>> time to ask.
>>
>> I have and admin form that has a ModelMultipleChoiceField that is used to
>> display
>> a ManyToMany model field that specifies a through model
>>
>> class Person(models.Model):
>>     name = models.CharField(max_length=10)
>>     attributes = models.ManyToManyField('Attribute',through='Has',
>>                                         blank=True, null=True)
>>
>> class Has(models.Model):
>>     person = models.ForeignKey('Person')
>>     attribute = models.ForeignKey('Attribute')
>>     value = models.CharField(max_length=10)
>>
>>
>> class Attribute(models.Model):
>>     name = models.CharField(max_length=10)
>>     atype = models.CharField(max_length=2,
>>                                           choices=(('TF','true/false'),
>>                                                        ('IN','text')))
>>
>>
>> class PersonAdminForm(forms.ModelForm):
>>
>>     class Meta:
>>         model = Person
>>
>>     attrs = forms.ModelMultipleChoiceField( \
>>                     label='Attributes',
>>                     queryset=Attribute.objects.all(),
>>                     widget=forms.CheckboxSelectMultiple(),
>>                     )
>>
>>
>> This CheckboxSelectMultiple works fine, but I want to be able to render
>> each relation according to the Attribute.atype value, meaning if it is TF,
>> then tender it as a CheckBox, if it is IN the render it as an InputText
>>
>> I inherited from CheckboxSelectMultiple so it does that, but then when I'm
>> on the admin form and for one specific attribute of type IN, rendered as a
>> TextInput,  I set a value (let's say 500) and then press save , the method
>>
>> SelectMultiple.value_from_datadict gets called and passed as data :
>>
>> <QueryDict: {u'csrfmiddlewaretoken':
>> [u'GWLnuoTSTjjLmpYOizodBA4VA1FmwdQw'],
>> u'_continue': [u'Save and continue editing'], u'name': [u'nico'],
>> u'attrs': [ u'2']}>
>>
>> And this is what has been driving me nuts!
>>
>> u'attrs': [ u'2'],
>>
>> As you can see it only passes the id of the attribute, not the id and the
>> value. What I
>> need is something like
>>
>> u'attrs': [ (u'2','500')],
>>
>> Any ideas on how to fix this ?
>>
>> Thanks!
>>
>> --
>> Nicolas Emiliani
>>
>> Lo unico instantaneo en la vida es el cafe, y es bien feo.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To post to this group, send email to django-users@googlegroups.com.
>> To unsubscribe from this group, send email to
>> django-users+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/django-users?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>



-- 
Nicolas Emiliani

Lo unico instantaneo en la vida es el cafe, y es bien feo.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to