2014-03-06 5 views
0

Представьте, что у вас есть модель, подобная той, что приведена ниже. На каждой странице музыканта вы хотите показать других музыкантов, у которых есть тот же агент.Стратегия для взаимодействия экземпляров той же модели

class Musician(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    agent = models.ForeignKey(Agent) 

Кроме того, вы хотите запустить метод, который будет отображаться на странице музыканта. Метод определяет сходство между текущим экземпляром и всеми соответствующими экземплярами, которые используют один и тот же агент.

def similarity(self, other_instance) 
    ... 
    return similarity 

Таким образом, шаблон необходимо следующее:

  1. Подробная информация о текущем музыканта
  2. Подробная информация о связанных музыкантов и их сходство с текущим музыкантом

Есть Есть Django- одобренный подход к решению этой проблемы? Имеет ли смысл использовать классные представления для такой проблемы? "Шоу других музыкантов, которые имеют один и тот же агент"

+0

Что у вас есть? Это выглядит довольно прямолинейно – karthikr

+0

Мой главный вопрос - где и как назвать функцию «подобия». Например, должен ли он быть метод, вызываемый в конкретном экземпляре? В этом случае мне нужно будет запустить набор запросов в экземпляре модели. Я не был уверен, что это приемлемая практика. В качестве альтернативы я мог бы назвать функцию «подобия» в представлении? Мой главный вопрос - понять, как следует использовать функцию подобия, особенно учитывая, что она должна знать о связанных случаях. – inperspective

ответ

0

Чтобы использовать этот запрос musician.agent.musician_set

def detail(request, musician_id): 
    musician = get_object_or_404(Musician, pk=musician_id) 
    return render_to_response('musician/detail.html', {'musician': musician}) 

И в шаблоне:

<h1>{{ musician.first_name }} {{ musician.last_name }}</h1> 

И родственный:

{% for related_musician in musician.agent.musician_set %} 
    #show related musician details 
    {{ related_musician.first_name }} 
{% endfor %} 
+0

Благодарим за отзыв. Я уже понимаю, как этого добиться. Мой вопрос больше связан с запуском описанного выше метода «подобия» и того, как эта информация должна проходить через систему. – inperspective

+0

@ user3246023 Если я правильно понимаю ваш вопрос, я не думаю, что django или представления на основе классов имеют какое-либо отношение к вашей проблеме. Вы пытаетесь реализовать некоторый алгоритм, чтобы найти сходство между двумя разными экземплярами. и это то, что django не скажет вам, как это сделать. – almalki

+0

Я уже написал алгоритм для сравнения подобия двух экземпляров. Мой вопрос касается того, где и как должна использоваться функция. Например, должен ли он быть метод, привязанный к текущему экземпляру, и поэтому все будет обрабатываться в самой модели? В этом случае мне наверняка понадобится запустить набор запросов из экземпляра модели. Или должна ли функция вызываться в представлении? – inperspective

Смежные вопросы