On Tue, Feb 17, 2009 at 9:44 AM, João Olavo Baião de Vasconcelos < joaool...@gmail.com> wrote:
> Hello all, > > when I save an object that has a ForeignKey raw_id_field, it shows the > label (Unicode representation) of the related object next to the field, > instead of just the field with object's PK. > > I'd like to do the same thing with a ManyToMany raw_id_field (for now, just > the objects' PK appear). > > I found out that the class responsible for this is "ManyToManyRawIdField", > inside file > /usr/lib/python2.4/site-packages/django/contrib/admin/widgets.py. > """ > class ForeignKeyRawIdWidget(forms.TextInput): > [...] > def render(self, name, value, attrs=None): > [...] > if value: > *output.append(self.label_for_value(value))* > return mark_safe(u''.join(output)) > > * def label_for_value(self, value):* > key = self.rel.get_related_field().name > obj = self.rel.to._default_manager.get(**{key: value}) > return ' <strong>Label: %s</strong>' % truncate_words(obj, 14) > > class ManyToManyRawIdWidget(ForeignKeyRawIdWidget): > [...] > def render(self, name, value, attrs=None): > attrs['class'] = 'vManyToManyRawIdAdminField' > if value: > value = ','.join([str(v) for v in value]) > else: > value = '' > return super(ManyToManyRawIdWidget, self).render(name, value, > attrs) > > * def label_for_value(self, value):* > return '' > [...] > """ > > I've to return the desired string (a concatenation of the related objects > unicode representations) in method label_for_value and append it to the > return of method render. But I dunno how to manipulate the object 'value' > neither how to append it to the result of render, as it's done in class > ForeignKeyRawIdWidget. > > How can I do it? Is there another way to accomplish this? > > Cheers! > -- > João Olavo Baião de Vasconcelos > Bacharel em Ciência da Computação > Analista de Sistemas - Infraestrutura > joaoolavo.wordpress.com > > > > I think value is a list in that case, of the primary keys, but the best way to find out is through expirementation, have that method return nothing but a string representation of value and look at that page, or use some other form of logging, once you know what it is you can make it do just what you want. Alex -- "I disapprove of what you say, but I will defend to the death your right to say it." --Voltaire "The people's good is the highest law."--Cicero --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---