Content Ausgabe - Mensch ist ein Idiot - Figur kann nicht, wie zu einem Content das ursprüngliche Modell zu binden abstrahiert ‚Favorite‘ Modell

StackOverflow https://stackoverflow.com/questions/2656637

  •  27-09-2019
  •  | 
  •  

Frage

Ursprünglich begann hier: Django IN Abfrage als String Ergebnis - ungültig wörtliche für int () mit Basis 10

Ich habe eine Reihe von Anwendungen innerhalb meiner Website, die derzeit mit einem einfachen „Blog“ app zu arbeiten. Ich habe einen ‚Favoriten‘ App entwickelt, leicht genug, dass der Content Rahmen in Django nutzt mich zu erlauben, von jeder Art einen ‚Favoriten‘ zu haben ... versucht, den anderen Weg zu gehen, aber ich weiß nicht, was ich ‚mache und keine Beispiele für nicht finden können.

Ich werde mit dem Lieblingsmodell beginnen:

favorite / models.py

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.contrib.auth.models import User

class Favorite(models.Model):
        content_type    = models.ForeignKey(ContentType)
        object_id       = models.PositiveIntegerField()
        user            = models.ForeignKey(User)
        content_object  = generic.GenericForeignKey()

        class Admin:
                list_display = ('key', 'id', 'user')

        class Meta:
                unique_together = ("content_type", "object_id", "user")

Nun, das mir erlaubt, durch die Favoriten-Schleife (auf einem Benutzer „Favoriten“ Seite, zum Beispiel) und erhalten die zugehörige Blog-Objekte über {{favorite.content_object.title}}.

Was will ich jetzt, und kann nicht herausfinden, ist das, was ich auf das Blog-Modell tun muß, mir zu erlauben, einige Haltegurt zu den Favoriten zu haben (so, wenn es in einer Liste angezeigt wird hervorgehoben werden kann, Beispiel).

Hier ist das Blog-Modell:

Blog / models.py

from django.db import models
from django.db.models import permalink
from django.template.defaultfilters import slugify
from category.models import Category
from section.models import Section
from favorite.models import Favorite
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic

class Blog(models.Model):
        title           = models.CharField(max_length=200, unique=True)
        slug            = models.SlugField(max_length=140, editable=False)
        author          = models.ForeignKey(User)
        homepage        = models.URLField()
        feed            = models.URLField()
        description     = models.TextField()
        page_views      = models.IntegerField(null=True, blank=True, default=0 )
        created_on      = models.DateTimeField(auto_now_add = True)
        updated_on      = models.DateTimeField(auto_now = True)

        def __unicode__(self):
                return self.title

        @models.permalink
        def get_absolute_url(self):
                return ('blog.views.show', [str(self.slug)])

        def save(self, *args, **kwargs):
                if not self.slug:
                        slug = slugify(self.title)
                        duplicate_count = Blog.objects.filter(slug__startswith = slug).count()
                        if duplicate_count:
                                slug = slug + str(duplicate_count)
                        self.slug = slug
                super(Blog, self).save(*args, **kwargs)

class Entry(models.Model):
        blog            = models.ForeignKey('Blog')
        title           = models.CharField(max_length=200)
        slug            = models.SlugField(max_length=140, editable=False)
        description     = models.TextField()
        url             = models.URLField(unique=True)
        image           = models.URLField(blank=True, null=True)
        created_on      = models.DateTimeField(auto_now_add = True)

        def __unicode__(self):
                return self.title

        def save(self, *args, **kwargs):
                if not self.slug:
                        slug = slugify(self.title)
                        duplicate_count = Entry.objects.filter(slug__startswith = slug).count()
                        if duplicate_count:
                                slug = slug + str(duplicate_count)
                        self.slug = slug
                super(Entry, self).save(*args, **kwargs)

        class Meta:
                verbose_name = "Entry"
                verbose_name_plural = "Entries"

Jede Führung?

War es hilfreich?

Lösung

Der django doc drauf ist hier: Reverse-generic Beziehungen . Im Grunde genommen auf dem Blog Modell selbst können Sie fügen Sie ein GenericRelation ...

class Blog(models.Model):
    favorites = generic.GenericRelation(Favorite)

Für einen bestimmten Blog können Sie alle der Favorite Modelle, die mit ihm verbunden sind ...

b = Blog.objects.get(slug='hello-world-blog-slug')
all_blog_favorites = b.favorites.objects.all()

Oder sehen, ob der aktuelle Benutzer das Blog hat favorited ...

user_has_blog_favorited = b.favorites.objects.filter(user=request.user).exists()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top