Thursday, November 26, 2015

[Not solved] formfield_for_foreignkey difficulty

On 27/11/2015 8:38 AM, Mike Dewhirst wrote:
> On 27/11/2015 8:19 AM, Mike Dewhirst wrote:
>> On 26/11/2015 11:24 PM, Mike Dewhirst wrote:
>>> I have formfield_for_foreignkey working for a couple of fields in my
>>> substance model but find a brick wall when I try to restrict choices in
>>> an inline m2m foreign key.
>>
>> It was late last night and I forgot to mention Django 1.8.7 Admin,
>> Python 3.4 and 2.7 running on Windows 8.1 and Ubuntu 12.04 and 14.04.
>>
>> In the admin looking at a substance, Ingredients can be added
>> successfully from a drop-down list but I'm trying to restrict choices in
>> that list. Here is my failing attempt in IngredientsInline() ...
>>
>> def formfield_for_foreignkey(self, db_field, request, **kwargs):
>> """Limit choices for 'ingredient' field """
>> company = get_user_company(request)
>> if db_field.name == 'ingredient':
>> kwargs["queryset"] = Substance_Ingredients.objects.filter(
>> Q(ingredient__division__company=company))
>> return super(SubstanceAdmin, self).formfield_for_foreignkey(
>> db_field, request, **kwargs)
>
> The last line was wrong. This works ... (Yay! :)
>
> return super(SubstanceAdmin.IngredientsInline,
> self).formfield_for_foreignkey(db_field, request, **kwargs)

It doesn't work at all. It only shows existing ingredients. When I try
to add an ingredient to make a new mixture the drop-down list is empty.

I tried replacing the kwargs stanza with this ...

kwargs["queryset"] = Substance.objects.filter(
Q(substance__division__company=company))

... which ought to work but no luck.

Any ideas?

Thanks

Mike


>
>
>
>>
>> BTW, ingredient in Substance_Ingredients (see below) is a substance,
>> Substance has a foreign key to Division which in turn has a foreign key
>> to Company
>>
>>>
>>> The m2m relation is substance<-m2m->substance where any substance can be
>>> an ingredient in a mixture (also a substance).
>>>
>>> The through table is ...
>>>
>>> class Substance_Ingredients(models.Model):
>>> substance = models.ForeignKey('Substance', null=True, blank=True,
>>> related_name='base_substance')
>>> ingredient = models.ForeignKey('Substance', null=True, blank=True,)
>>> proportion = models.DecimalField(null=True, blank=True,)
>>>
>>> Is that a limitation in the admin or should I try harder?
>>>
>>> Thanks
>>>
>>> Mike
>>>
>>
>

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/5657828A.7070306%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment