簡體   English   中英

無法訪問我不確定的外鍵的Django自動生成的集合訪問器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM