2017-03-08 88 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)