繁体   English   中英

在django模型中的序列通过外键访问模型之间的模型如何修复我的模型?

[英]Sequence in the django model access between model through foreign key to model how to fix my models?

我有一个问题,可以通过使用模型和url路由转化为课程,技巧,结果,需要通过url进行排序

系列/ serial_slug / season_slug / series_slug /

但是要获得该系列的季节,您需要

系列/ serial_slug / season_slug /

事实证明我无权访问series / serial_slug /

season_slug /无法访问Season模型中的serial_slug,因为对于jango来说很重要,如果需要访问任何模型,则该模型必须位于所请求的momme的顶部,因此可以访问“无串行模型”,因为它位于下面季节模型,如果将它们反转,则将无法正常工作,尽管这个主意应该是这样的:

在“ Serial”模型中,有很多季节性,即“ ManyToMany”模型,在逻辑上是“ Season”模型,上面有一个模型Serial,然后是模型Season,然后是Series,但是它是Series不烂! 在“季节”模型中,有很多系列,即“系列”模型为“ ManyToMany”,要获得一致的网址,您需要访问所有模型,即“系列”模型具有“季节”然后将“ Season”模型用于“ ForeignKey”模型。“ Season”模型仅可通过“ ForeignKey”再次访问1个系列,如果您这样做,那么它将无法正常工作,因为他需要在其顶部有一个模型,查询即将到来!

我认为这对于Django系列来说是个好主意,即序列,模型的依赖关系以及url中的序列(通过反向()),即函数get_absolute_url(),我在上面有代码pastebin,| https://pastebin.com/RAJP6CNv | 您能看看我是否可以在我的stackoverflow中抛出我的问题的链接,这里有解释的内容,但这没有帮助,也许您会明白的,谢谢您的教训!

这是我的主要url.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),

    url(r'^series/', include("serials.urls", namespace='series')),
    url(r'^', include("serials.urls", namespace='homeview')),
]

这是我的应用程序urls.py

from django.conf.urls import include, url
from .views import homeview, post_of_serial, post_of_season, post_of_serie

urlpatterns = [
   url(r'^$', homeview, name='homeview'),  # /series/
   url(r'^(?P<serial_slug>[\w-]+)/$', post_of_serial, name='post_of_serial'),  # /series/Prison_Break/
   url(r'^(?P<serial_slug>[\w-]+)/(?P<season_slug>[\w-]+)/$', post_of_season, name='post_of_season'),  # /series/Prison_Break/season_5/
   url(r'^(?P<serial_slug>[\w-]+)/(?P<season_slug>[\w-]+)/(?P<series_slug>[\w-]+)/$', post_of_serie, name='post_of_serie'),  # /series/Prison_Break/season_5/2/  

]

这是我的模型

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
import datetime

class Status(models.Model):
    name                                    = models.CharField(max_length=120)
    is_active                               = models.BooleanField(default=True)
    timestamp                               = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated                                 = models.DateTimeField(auto_now_add=False, auto_now=True)


    def __str__(self):
        return "|{0}| |{1}|".format(self.name, self.is_active)

    class Meta:
        ordering                            = ["-timestamp"]
        verbose_name                        = 'Staus'
        verbose_name_plural                 = 'Statuses'


class Season(models.Model):
    id                                      = models.AutoField(primary_key=True)
    name_of_the_season                      = models.CharField(max_length=40)
    slug                                    = models.SlugField(unique=False, blank=True) 
    name_for_easy_access                    = models.CharField(max_length=40)
    preview_of_season                       = models.ImageField(upload_to="previews/preview_for_season/", default=None,width_field="width_field", height_field="height_field")
    width_field                             = models.IntegerField(default=150)
    height_field                            = models.IntegerField(default=150)
    number_of_released_series               = models.IntegerField(default=0)
    year                                    = models.IntegerField(default=2017)
    timestamp                               = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated                                 = models.DateTimeField(auto_now_add=False, auto_now=True)
    is_active                               = models.BooleanField(default=True)


    def get_absolute_url(self):
        return reverse('series:post_of_season', kwargs=
                      {'serial_slug': self.serial.slug,
                      'season_slug': self.slug,
                      })

    def __str__(self):
        return "%s" % self.name_for_easy_access

    class Meta:
        ordering                            = ["-timestamp"]
        verbose_name                        = 'Season'
        verbose_name_plural                 = 'Seasons'


class Serial(models.Model):
    id                                      = models.AutoField(primary_key=True)
    rus_name_of_seriall                     = models.CharField(max_length=40)
    eng_name_of_seriall                     = models.CharField(max_length=40)
    slug                                    = models.SlugField(unique=False, blank=True) 
    number_of_serial                        = models.DecimalField(max_digits=10, decimal_places=2, default=True)
    preview_of_serial                       = models.ImageField(upload_to="previews/preview_for_serials/", default=None,width_field="width_field", height_field="height_field")
    width_field                             = models.IntegerField(default=0)
    height_field                            = models.IntegerField(default=0)
    seasonss                                = models.ManyToManyField(Season, default=None, blank=True)
    timestamp                               = models.DateField(auto_now_add=True)
    end_or_in_proccess                      = models.ForeignKey(Status, default=None)
    timestamp                               = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated                                 = models.DateTimeField(auto_now_add=False, auto_now=True)
    is_active                               = models.BooleanField(default=True)

    def get_absolute_url(self):
        return reverse('series:post_of_serial', kwargs={'serial_slug': self.slug})


    def __str__(self):
        return "%s" % self.rus_name_of_seriall

    class Meta:
        ordering                            = ["-timestamp"]
        verbose_name                        = 'Serial'
        verbose_name_plural                 = 'Serials'



class Series(models.Model):
    id                                      = models.AutoField(primary_key=True)
    rus_name                                = models.CharField(max_length=60) 
    eng_name                                = models.CharField(max_length=60) 
    is_active                               = models.BooleanField(default=True)
    serial_of_this_series                   = models.ForeignKey(Serial, on_delete=models.CASCADE, default=True)
    season_of_this_series                   = models.ForeignKey(Season, on_delete=models.CASCADE, default=True)
    number_of_series                        = models.IntegerField(default=0, blank=True, null=True)
    slug                                    = models.SlugField(unique=False, blank=True) 
    description                             = models.TextField(max_length=700, blank=True, default=None) 
    rating                                  = models.FloatField(default=0, blank=True)  
    timestamp_rus                           = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated                                 = models.DateTimeField(auto_now_add=False, auto_now=True)
    timestamp_eng                           = models.CharField(max_length=60) 
    time_of_series                          = models.DecimalField(max_digits=10, decimal_places=2, default=0)

    def get_absolute_url(self):
        return reverse('series:post_of_serie', kwargs=
                      {'serial_slug': self.serial_of_this_series.slug,
                       'season_slug': self.season_of_this_series.slug,
                       'series_slug': self.slug})

    def __str__(self):
        return "%s | %s" % (self.rus_name, self.number_of_series)

    class Meta:
        ordering                            = ["-timestamp_rus"]
        verbose_name                        = 'Series'
        verbose_name_plural                 = 'Series'

您可以通过放置字符串而不是类来解决这些问题

更改

models.ForeignKey(Serial) 

models.ForeignKey("Serial")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM