Django 模型中的序列通过外键访问模型之间的模型如何修复我的模型?
Sequence in the django model access between model through foreign key to model how to fix my models?
我有这样一个问题,可以变成一堂课,一个 hack,有模型,有 url-routing,事实证明
需要排序,即按url
系列/serial_slug/season_slug/series_slug/
但要访问该系列的季节,您需要这样
系列/serial_slug/season_slug/
原来我没有权限访问
系列 / serial_slug /
season_slug / 无法访问季节模型中的 serial_slug,因为它是
对于 jango 很重要,如果任何模型需要访问,那么模型必须
位于请求的妈妈之上,因此可以访问没有系列模型,因为它低于季节模型,如果他们
反了,就不行了,虽然思路应该是这样的:
在 "Serial" 模型中有很多季节性 "ManyToMany"
模型 "Season" 即逻辑字段 有一个模型 Serial
从上面,然后是模型季节,然后是系列,但是
它不抢劫!在
"Season"型号有很多系列,也就是"ManyToMany"
系列模型,并获得一致的 url,您需要访问所有
模型,也就是说,"Series" 模型有一个季节 "ForeignKey"
"Season" model then model "Season" has only 1 series again access through
"ForeignKey",如果你这样做,那就不行了,因为,他需要
在上面有一个模型,查询即将到来!
我认为这对 Django 系列来说是个好主意,即
序列、模型的依赖性以及模型中的序列
url,通过reverse(),即函数get_absolute_url(),我
在 pastebin 上有代码,| https://pastebin.com/RAJP6CNv
|你能看看我能不能扔
link 对于我在 Whosebug 中的问题,有一些解释,但它
没有帮助,也许你会明白,谢谢你的教训!
这是我的主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/
]
这是我的models.py
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'
您可以通过输入字符串而不是 class 来解决这些问题,例如
改变
models.ForeignKey(Serial)
至
models.ForeignKey("Serial")
我有这样一个问题,可以变成一堂课,一个 hack,有模型,有 url-routing,事实证明 需要排序,即按url
系列/serial_slug/season_slug/series_slug/
但要访问该系列的季节,您需要这样
系列/serial_slug/season_slug/
原来我没有权限访问 系列 / serial_slug /
season_slug / 无法访问季节模型中的 serial_slug,因为它是 对于 jango 很重要,如果任何模型需要访问,那么模型必须 位于请求的妈妈之上,因此可以访问没有系列模型,因为它低于季节模型,如果他们 反了,就不行了,虽然思路应该是这样的:
在 "Serial" 模型中有很多季节性 "ManyToMany" 模型 "Season" 即逻辑字段 有一个模型 Serial 从上面,然后是模型季节,然后是系列,但是 它不抢劫!在 "Season"型号有很多系列,也就是"ManyToMany" 系列模型,并获得一致的 url,您需要访问所有 模型,也就是说,"Series" 模型有一个季节 "ForeignKey" "Season" model then model "Season" has only 1 series again access through "ForeignKey",如果你这样做,那就不行了,因为,他需要 在上面有一个模型,查询即将到来!
我认为这对 Django 系列来说是个好主意,即
序列、模型的依赖性以及模型中的序列
url,通过reverse(),即函数get_absolute_url(),我
在 pastebin 上有代码,| https://pastebin.com/RAJP6CNv
|你能看看我能不能扔
link 对于我在 Whosebug 中的问题,有一些解释,但它
没有帮助,也许你会明白,谢谢你的教训!
这是我的主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/
]
这是我的models.py
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'
您可以通过输入字符串而不是 class 来解决这些问题,例如
改变
models.ForeignKey(Serial)
至
models.ForeignKey("Serial")