ForeignKey field will not appear in Django admin site
模型上的外键未出现在Django管理网站中。这与是否在modeladmin实例中显式指定字段(字段=('title'、'field that not show up')无关。
我意识到有许多变量可能导致这种行为。
1 2 3 4 5 6 7 8 9 | class AdvertiserAdmin(admin.ModelAdmin): search_fields = ['company_name', 'website'] list_display = ['company_name', 'website', 'user'] class AdBaseAdmin(admin.ModelAdmin): list_display = ['title', 'url', 'advertiser', 'since', 'updated', 'enabled'] list_filter = ['updated', 'enabled', 'since', 'updated', 'zone'] search_fields = ['title', 'url'] |
问题是广告商的外键没有出现在Adbase的管理员中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | class Advertiser(models.Model): """ A Model for our Advertiser """ company_name = models.CharField(max_length=255) website = models.URLField(verify_exists=True) user = models.ForeignKey(User) def __unicode__(self): return"%s" % self.company_name def get_website_url(self): return"%s" % self.website class AdBase(models.Model): """ This is our base model, from which all ads will inherit. The manager methods for this model will determine which ads to display return etc. """ title = models.CharField(max_length=255) url = models.URLField(verify_exists=True) enabled = models.BooleanField(default=False) since = models.DateTimeField(default=datetime.now) expires_on=models.DateTimeField(_('Expires on'), blank=True, null=True) updated = models.DateTimeField(editable=False) # Relations advertiser = models.ForeignKey(Advertiser) category = models.ForeignKey(AdCategory) zone = models.ForeignKey(AdZone) # Our Custom Manager objects = AdManager() def __unicode__(self): return"%s" % self.title @models.permalink def get_absolute_url(self): return ('adzone_ad_view', [self.id]) def save(self, *args, **kwargs): self.updated = datetime.now() super(AdBase, self).save(*args, **kwargs) def impressions(self, start=None, end=None): if start is not None: start_q=models.Q(impression_date__gte=start) else: start_q=models.Q() if end is not None: end_q=models.Q(impression_date__lte=end) else: end_q=models.Q() return self.adimpression_set.filter(start_q & end_q).count() def clicks(self, start=None, end=None): if start is not None: start_q=models.Q(click_date__gte=start) else: start_q=models.Q() if end is not None: end_q=models.Q(click_date__lte=end) else: end_q=models.Q() return self.adclick_set.filter(start_q & end_q).count() class BannerAd(AdBase): """ A standard banner Ad""" content = models.ImageField(upload_to="adzone/bannerads/") |
号
神秘感加深了。我刚刚尝试为Adbase和Bannerad创建一个ModelForm对象,并为广告客户生成两个字段。这里发生了一些疯狂的行政事务…
我相信我刚刚遇到了完全相同的问题,但是由于持续的同事的帮助,我能够调试它。:)
简而言之,如果您查看原始HTML源代码,您会发现该字段一直都在那里-只是:
- Django很聪明,用css
class="form-row $FIELD_NAME" 把表单字段放在一个DIV中, - 该字段的名称是"广告客户",因此CSS类是"窗体行广告客户",
- …Adblock Plus。
adblock plus将隐藏CSS类"广告商"的任何内容,以及大量其他CSS类。
我认为这是姜戈的一个错误。
可能是编码错误。我也遇到了同样的问题,但是当我在models.py中添加了——编码:utf-8——时,一切都很好。
同样问题的另一个非常愚蠢的原因是:
如果相关模型只有一个实例,那么过滤器就不会显示。在这种情况下,
我们刚刚碰到这个问题。
看起来,如果你把你的现场广告商称为管理员,就会得到一个"广告商"类。
然后被标准的广告拦截插件隐藏。如果您查看源,您的字段将在那里。
这当然是个奇怪的问题。如果您更改,则在
1 | advertiser = models.ForeignKey(Advertiser) |
到
1 | adver = models.ForeignKey(Advertiser) |
号
然后我相信它会出现。
尝试禁用广告阻止程序。不,这不是玩笑。我刚碰到这个确切的问题。
你说的是
您的相关模型集是否使用
If the field is a ForeignKey, Django
will display the unicode() of the
related object
号
还要检查这个线程以获取一些提示:django modeladmin中的"list_display"是否可以显示foreignkey字段的属性?
鲍威尔,你有没有在各自的modeladmin类中注册模型?
modeladmin定义后的