2017-03-08 78 views
0

如何在Django Admin中對一組字段進行分組。我的意思是Django Admin Fk分組

表1:用戶 - 用戶密鑰 - 用戶名

表2:郵政 - 發佈關鍵 - 用戶密鑰(FK)

在PostAdmin我想顯示用戶名的作者也對帖子進行了處理。這可以工作,但會顯示用戶創建的每個帖子的用戶名。

有沒有一種方法,我可以只顯示用戶名一次,但在動作更新用戶創建的所有帖子? - 用is_sealed = true更新所有帖子。

型號

class User(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(_("email address"), unique=True) 
    first_name = models.CharField(
       _("first name"), max_length=50, 
       validators=[RegexValidator(
        regex_alpha, code='invalid_first_name', 
        message=regex_alpha_message, 
       )] 
    ) 
    middle_name = models.CharField(
        _("middle name"), max_length=50, blank=True, 
        null=True, default=None, 
        validators=[RegexValidator(
          regex_alpha, code='invalid_middle_name', 
          message=regex_alpha_message, 
       )] 
    ) 

class Post(models.Model): 
    owner = models.ForeignKey(settings.AUTH_USER_MODEL) 
    title = models.CharField(_('title'), max_length=250) 
    label = models.ForeignKey(Label, verbose_name=_('label')) 
    significance = models.CharField(max_length=3, choices=SIGNIFICANCE_CHOICES) 
    is_sealed = models.BooleanField(_('Is Sealed?'), default=False) 
    event_date = models.DateField() 
    message = models.TextField(_("Message"), blank=True, default='') 

PostAdmin(我需要解決這裏的問題)

class PostAdmin(admin.ModelAdmin): 
    list_display = ['owner','is_sealed'] 
    ordering = ['owner'] 
    actions = [open_vault] 
    search_fields = ['owner__email',] 
    list_filter = ['owner__email'] 
+0

你是什麼意思'顯示用戶名一次?在你的代碼中,現在每行(entry)都應該顯示'owner'。 –

+0

如果店主有10個帖子或1個帖子,我只想讓店主顯示一次。基本上由所有者分組 – user3381710

+0

因此,您希望** list_display中的每行**包含按作者分組的所有帖子。對?如果是這樣的話,爲什麼不通過作者過濾帖子,在右側使用過濾器? –

回答

0

因此,根據您的意見,您必須編寫自定義方法中UserAdmin相關的顯示帖子用戶/作者,如下:

from django.utils.html import mark_safe 

class UserAdmin(admin.ModelAdmin): 
    list_display = ['email', 'get_posts'] 
    # ... other settings here 

    def get_posts(self, obj): 
     to_return = '<ul>' 
     for post in obj.post_set.all(): 
      to_return += '<li>{}</li>'.format(post.title) 
     to_return += '</ul>' 
     return mark_safe(to_return)