Как сделать обратное для get_absolute_url со многими ко многим полям? - PullRequest
1 голос
/ 02 июня 2011

У меня есть модель с полями «многие ко многим», и мне нужно выбрать идентификатор, выбранный из поля «многие ко многим». Я украсил get_absolute_url метод декоратором permaling. И это не работает. Итак, я понимаю, что мне нужно изменить отношение, это очевидно из следа, но я не очень понимаю, что мне делать?

Модель:

class MenuItems(models.Model):
    reference_value = models.CharField(max_length=255)
    filter_ids = models.ManyToManyField(Filter, blank = True)

    def __unicode__(self):
        return u'%s' % self.reference_value

    @models.permalink
    def get_absolute_url(self): 
        return ('homepage_ids', None, {'ids': self.filter_ids })

Я пытался сделать с помощью reverse (), но у меня поведение метода не изменилось.

    @models.permalink
    def get_absolute_url(self): 
        return reverse('homepage_ids', kwargs={'ids': self.filter_ids })

Ответы [ 3 ]

1 голос
/ 02 июня 2011

не видя шаблон URL.

self.filter_ids не возвращает список идентификаторов, что-то вроде.

self.filter_ids.all().values_list('id', flat=True)

вернет [1,2,3]

0 голосов
/ 03 июня 2011

Я сделал это следующим образом: url

 url(r'^(?P<ids>\d(&\d)*)?/?$', 'homepage', name='homepage'),

models

class MenuItems(models.Model):
"""Menu items... What???"""
reference_value = models.CharField(max_length=255)
filter_ids = models.ManyToManyField(Filter, blank = True, related_name="filter_ids")

def __unicode__(self):
    return u'%s' % self.reference_value

def get_absolute_url(self):
    int_ids = list(self.filter_ids.all().values_list('id', flat=True))
    str_ids = "&".join([str(val) for val in int_ids])
    return reverse('homepage', kwargs = {'ids': str_ids, })

Я убил @ Permalink, потому что декоратор API Permalink был неиспользуем, конвертируйте мои идентификаторы в строку с паройшагов и применить обратную функцию.Проблема одних и тех же URL разных страниц все еще существует, но это не важно для моего приложения, потому что никогда не будет.

0 голосов
/ 02 июня 2011

Вы не опубликовали свой URL, но что-то вроде этого должно работать

URLs

url(r'^/something/(?P<var>\d+)/$', view_name, name="homepage_ids"),

модель

@permalink
def get_absolute_url(self):
    return ('homepage_ids', [str(self.filter_ids)])

шаблон

<a href="{{ ids.get_absolute_url }}"> {{ ids }}</a>

взгляните на учебник по Джанго

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...