2011-04-28 53 views
1

模型上的外鍵沒有出現在Django管理站點中。這與ModelAdmin實例(fields =('title','field-that-does-not-show-up'))中是否明確指定該字段無關。ForeignKey字段不會出現在Django管理站點中

我意識到有很多變數可能導致這種行爲。

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

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對象,併爲廣告客戶創建兩個生成的字段。一些瘋狂的管理事情發生在這裏...

回答

4

我相信我剛剛碰到,確切地說也出現了同樣的問題,但是由於持續合作者的幫助,能夠進行調試。:)

總之,如果你在原始的HTML源看,你會發現場一直存在 - 它只是:

  • Django的嘗試是聰明的,並把表單字段一個div內與CSS class="form-row $FIELD_NAME",
  • 該字段的名稱是「廣告客戶」,所以CSS類是「單排廣告客戶」,
  • ... Adblock Plus。

Adblock Plus會隱藏任何與CSS類「廣告客戶」,以及許多其他CSS類的地獄。

我認爲這是一個在Django中的錯誤。

+0

哈哈,不敢相信這花了我很長時間才能確定這一個。多麼愚蠢的錯誤。多謝你們! – powellc 2012-11-04 02:24:37

+0

你認爲當有人試圖爲廣告創建容器時,Django應該引發異常嗎?我喜歡。 – thepeer 2013-02-19 17:05:16

0

Powellc,你有模型註冊與他們各自的ModelAdmin類嗎?

admin.site.register(Advertiser, AdvertiserAdmin)之後的ModelAdmin定義。

+0

哦,是的。對不起,我試圖不要冗長,但我認爲這不是代碼的好處。是的,底部註冊了兩個ModelAdmins模型。感謝您花時間查看它! – powellc 2011-04-28 15:13:53

0

你說的是list_display選項吧?

unicode - 您的相關模型集的方法嗎?

如果該字段是一個ForeignKey,Django的 將顯示 相關對象

同樣的的Unicode()檢查此線程一些提示:Can "list_display" in a Django ModelAdmin display attributes of ForeignKey fields?

+0

謝謝,但我在這兩種模型上都有unicode方法。我也試圖吹掉ModelAdmin的(即只是設置他們'通'),似乎沒有任何工作... – powellc 2011-04-28 15:23:20

+0

是否有任何字段顯示?我的意思是,如果你沒有定義ModelAdmin,我不會指望隨機字段出現(「如果你不設置list_display,管理站點將顯示一個顯示每個對象的__unicode __()表示的單個列。 「)。您的ForeignKey是否以change_form或其他形式工作?你可以在shell會話中訪問相關模型嗎?也許你應該展示你的模型定義。 – arie 2011-04-28 15:32:47

+0

是的,模型顯示在管理員,我可以添加他們與廣告客戶領域與殼很好。這只是因爲一些非常奇怪的原因,「廣告客戶」的外鍵字段沒有被管理員選中。感謝大家看看,我愛的人。 (另外,我已經在上面的問題中附加了模型定義) – powellc 2011-04-28 15:42:54

0

請停用廣告攔截器。不,這不是玩笑。我遇到了這個確切的問題。

4

也許這是一個編碼錯誤。我有同樣的問題,但是當我添加# - - 編碼:UTF-8 - - 在models.py中,一切正常。

0

這確實是一個奇怪的問題。上如果更改

advertiser = models.ForeignKey(Advertiser) 

adver = models.ForeignKey(Advertiser) 

那麼AdBase模型,我相信它會顯示出來。

0

我們剛碰到這個問題。

看來,如果你打電話給你的現場廣告客戶在管理中獲得一個'廣告客戶'類。

然後被標準的廣告攔截插件隱藏起來。如果你查看源代碼,你的字段將會在那裏。

2

同樣的問題的另一個非常愚蠢的原因:

如果只有相關模型的一個實例,然後過濾器就不會顯示。 RelatedFieldListFilter類中有has_output()方法,在這種情況下返回False

相關問題