2017-06-17 3 views
0

Ich habe ein Standardmodell für Benutzermodelle und Kategorien wie dieses;Werte bei der Verwendung von "Viele zu viele" Relationen richtig erhalten

class Categories(models.Model): 
    name=models.CharField(max_length=100) 
    def __str__(self): 
     return self.name 

Und hier ist eine andere Klasse für die Beziehung, die einige Benutzer mit einigen Kategorien verbindet;

class Interested(models.Model): 
    user = models.ManyToManyField(User) 
    category = models.ManyToManyField(Categories) 

Zum Beispiel, wenn ich Benutzer wie Bob, Eric, Oliver, Michael

und Kategorien wie Basketball, Fußball

und Beziehungen, wie der

  • Bob - > Basketball, Fußball

  • Eric-> Basketball

  • Oliver -> Fußball

(michael nicht daran interessiert, etwas)

I Liste, die daran interessiert zu bekommen, was? Wie kann ich damit umgehen? Danke für Ihre Hilfe.

Antwort

0

Sie können die Instanz von Interesse für einen Benutzer erhalten mit:

interested = Interested.objects.get(user="your user") 

und die Liste der verknüpften categorys von:

interested.category.all() 

Aber ich würde, wenn sie nicht unbedingt erforderlich! Aus irgendeinem anderen Grund, nur Verknüpfen Sie die Kategorie direkt mit dem Benutzer.

class Category(models.Model): 
    name = models.Charfield() 
    user = models.ManyToManyField(user) 

Auf diese Weise erhalten Sie die Kategorien für eine Benutzer:

categorys = Category.objects.filter(user="youruser")

und wenn Sie dies zu Ihrer Vorlage tun nur passieren:

{% for category in categorys %} {{ category.name }}{% endfor %}

die Nutzer interessieren sich für eine Kategorie zu erhalten, erhalten nur die Kategorie Beispiel mit:

category = Category.objects.get(name="categoryname")

und die zugehörigen Benutzermodelle mit:

usersincategory = category.user.all()

, wenn Sie dies für alle categorys wollen benutzen Sie einfach eine normale for-Schleife:

categorys = Category.objects.all() for category in categorys: category.user.all()

+0

Vielen Dank für die Antwort. Wie kann ich eine Liste von verschiedenen Benutzern erhalten, die an einer bestimmten Kategorie interessiert sind? –

+0

Editiert mein awnser ... Wenn Sie Ihr Interest-Modell um jeden Preis verwenden möchten, ändern Sie eines der vielen tanktop-Felder in Fremdschlüssel und greifen Sie über die Fremdschlüssel-Modellinstanz zu ... –

Verwandte Themen