![](/img/trans.png)
[英]unable to access related objects with generic foreign key in Django and content types
[英]unable to access the Django autogenerated set accessor for my ambiguous foreign key
我有以下模型:
from django.db import models
from django.utils import timezone
class Resource(models.Model):
title = models.CharField(max_length=300)
shortcode = models.CharField(max_length=20, null=True, blank=True)
img = models.URLField(null=True, blank=True)
summary = models.TextField(null=True, blank=True)
url = models.URLField('Link to Resource', null=True, blank=True)
pub_date = models.DateTimeField('date published')
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
def __unicode__(self):
return self.title
class Prereq(models.Model):
prereq = models.ForeignKey(Resource, null=True, related_name='prereq_backlink')
resource = models.ForeignKey(Resource, null=True, related_name='prereq_resource')
def __unicode__(self):
return self.prereq.title
class Concurrent(models.Model):
concurrent = models.ForeignKey(Resource, null=True, related_name='concurrent_backlink')
resource = models.ForeignKey(Resource, null=True, related_name='concurrent_resource')
def __unicode__(self):
return self.concurrent.title
class Concomitant(models.Model):
concomitant = models.ForeignKey(Resource, null=True, related_name='concomitant_backlink')
resource = models.ForeignKey(Resource, null=True, related_name='concomitant_resource')
def __unicode__(self):
return self.concomitant.title
我期望自動生成訪問器,這使我可以獲得資源的先決條件集,但是這些都不起作用:
r = Resource.objects.get(id=2)
r.prereq_resource_set # AttributeError: 'Resource' object has no attribute 'prereq_resource_set'
r.prereq_backlink_set # AttributeError: 'Resource' object has no attribute 'prereq_resource_set'
最糟糕的是,管理界面完美運行。 我能夠通過下拉菜單指定先決條件並保存它們,並且它們會持續存在。 這是我的管理員代碼:
from django.contrib import admin
from idhhb.models import Resource, Prereq, Concurrent, Concomitant
class PrereqInline(admin.TabularInline):
model = Prereq
fk_name = 'prereq'
extra = 5
class ConcurrentInline(admin.TabularInline):
model = Concurrent
fk_name = 'concurrent'
extra = 3
class ConcomitantInline(admin.TabularInline):
model = Concomitant
fk_name = 'concomitant'
extra = 3
class ResourceAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': 'title shortcode img summary url pub_date'.split() }),
]
inlines = [PrereqInline,]
admin.site.register(Resource, ResourceAdmin)
對於具有related_name
屬性的關系,不應添加_set
后綴:
r = Resource.objects.get(id=2)
r.prereq_resource.all()
r.prereq_backlink.all()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.