【问题标题】:how to exclude choices field values in django models?如何排除 django 模型中的选择字段值?
【发布时间】:2020-10-05 08:03:35
【问题描述】:

form 根据登录用户的用户组,如果登录用户不属于某个组,则应该删除一些 story_status 值。我有一个生产者组,如果登录用户不属于生产者组,那么我想要从story_status 中删除选择字段值footage ready。我的代码不排除值

models.py

class Article(models.Model):
    STORY_STATUS = {
        ('story not done', 'story not done'),
        ('story finish', 'story finish'),
        ('Copy Editor Done', 'Copy Editor Done'),
        ('footage ready', 'footage ready')
    }

    title = models.CharField(max_length=255, help_text="Short title")
    story_status = models.CharField(choices=STORY_STATUS)

输出.html

class ArticleForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(ArticleForm, self).__init__(*args, **kwargs)
        if not self.user.groups.filter(name__iexact='producer').exists():
            self.queryset = Article.objects.exclude(story_status='footage ready')

    class Meta:
        model = Article
        fields = [
            'title',
            'story_status'
        ]

【问题讨论】:

    标签: python python-3.x django django-models django-forms


    【解决方案1】:

    尝试使用 init 方法覆盖选择

    STORY_STATUS = [
        ('story not done', 'story not done'),
        ('story finish', 'story finish'),
        ('Copy Editor Done', 'Copy Editor Done'),
        ('footage ready', 'footage ready')
    ]
    
    story_status_config = {
        'producer': ['footage ready'],
        'other_group': ['story finish']
    }
    
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(ArticleForm, self).__init__(*args, **kwargs)
        for group,exclude_vals in story_status_config:
            if not self.user.groups.filter(name__iexact=group).exists():
                self.fields['story_status'].choices = [x for x in STORY_STATUS if x[0] not in exclude_vals]
    

    【讨论】:

    • 如果我有多个组并且我想排除不同的不同值,那么每次我需要定义覆盖选项?
    • 然后用 {'group_name': exclude_values} 制作了一本字典。
    • 否则你必须在不同的模型中维护它并存储这些配置
    • 我认为一本带有 {'group_name': exclude_values} 的字典是个好主意
    • 你想解释一下我如何制作字典和排除值
    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 2019-04-20
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2011-08-25
    • 2017-12-28
    相关资源
    最近更新 更多