Thanks a lot for advice, it works. Regards, Zdenko
On 14 čnc, 12:40, Tom Evans <tevans...@googlemail.com> wrote: > On Thu, Jul 14, 2011 at 10:56 AM, zdenulo <zden...@gmail.com> wrote: > > Greetings to everybody, > > I have a problem for which I didn't find solution on internet, > > therefore I am posting context: > > > simplified models.py for application testapp (django 1.3): > > > class Menu(models.Model): > > parent_menu = models.ForeignKey('Menu', blank=True, null=True) > > ForeignKeys to themselves should use 'self' as the target model, eg: > > parent_menu = models.ForeignKey('self', blank=True, null=True) > > > > > > > > > > > title = models.CharField(max_length=30) > > def __unicode__(self): > > return self.title > > > class Page(models.Model): > > menu = models.ForeignKey('Menu', blank = True, null=True) > > > file admin.py > > > from testapp.models import Page, Menu > > from django.contrib import admin > > > class PageAdmin(admin.ModelAdmin): > > def formfield_for_foreignkey(self, db_field, request, **kwargs): > > if db_field.name == "menu": > > kwargs["queryset"] = Menu.objects.raw('select * from > > testapp_menu where not id in (select distinct parent_menu_id from > > testapp_menu where parent_menu_id is not null)') > > kwargs["queryset"].all = kwargs["queryset"].__iter__ > > return super(PageAdmin, > > self).formfield_for_foreignkey(db_field, request, **kwargs) > > That just made me weep. > > > > > > > > > > > > > class MenuAdmin(admin.ModelAdmin): > > pass > > > admin.site.register(Menu, MenuAdmin) > > admin.site.register(Page, PageAdmin) > > > some explanation: > > When I am creating Page, I want to have in a list all Menu instances > > which either don't have parent menu or don't have "child > > menu" (inverse relationship as defined in model). Now I didn't find > > any suitable query using Django syntax, that's why I used raw query. > > It filters Menu objects as I expect, but when I want to save Page > > instance, I get following error 'RawQuerySet' object has no attribute > > 'get' > > > problem is in method \django\forms\models.py to_python > > 972. value = self.queryset.get(**{key: value}) > > > I don't know how to bypass this error and I didn't find anywhere > > discussion about this case, so every help and advice is much > > appreciated. > > Don't do crazy monkey patching of queryset classes? > > Your query is quite expressible in the ORM: > > p_menu_ids = > Menu.objects.filter(parent_menu__isnull=False).order_by('parent_menu').dist > inct().values_list('parent_menu') > qs = Menu.objects.exclude(id__in=p_menu_ids) > > Cheers > > Tom -- 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.