【问题标题】:Automatic author in Django adminDjango admin 中的自动作者
【发布时间】:2010-09-23 19:36:04
【问题描述】:

全部。我正在为我的 django 网站做管理员,我遇到了一个障碍。

我有一个Entry 模型和一个Related 模型。 Related 模型有两个外键字段:一个到 Entry 模型 (entry) 和一个到 django 的 User 模型 (author)。 Related 模型被认为是Entry 模型的“子模型”,每个用户每个Entry 只能有一个Related

在管理员中,RelatedEntry 内联编辑。正如我所拥有的那样,管理员一次只显示一个额外的Related,它会自动用当前用户填充author 字段:

from django.contrib import models
from django.contrib.auth.models import User

class Entry(models.Model):
    pass

class Related(models.Model):
    entry = models.ForeignKey(Entry)
    author = models.ForeignKey(User)
    class Meta:
        unique_together = ('entry', 'author')




from django.contrib import admin

class RelatedInline(admin.StackedInline):
    model = Related
    exclude = ('author',)
    max_num = 1

class EntryAdmin(admin.ModelAdmin):
    inlines = (RelatedInline,)
    def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in filter(lambda obj: isinstance(obj, Related), instances):
             if instance.__dict__.get('author', None) is None:
                 instance.author = request.user
                 instance.save()
        formset.save_m2m()

问题是,如果用户想要编辑一个已经有 anyoneRelated 的条目,那么只会显示一个相关字段。

如果可能的话,我想知道是否有人对我如何保持与此类似的设置有任何想法,但让管理员自动显示用户的related(如果存在),如果不存在则显示空表单。除此之外,我会去掉max_num = 1 并用extra = 1 替换它。当然,这意味着即使用户已经有一个用于当前条目的“新相关”表单也会显示,所以我想知道是否有人知道我将如何捕捉可能的IntegrityError 并让用户知道发生了错误。

【问题讨论】:

标签: django django-admin


【解决方案1】:

事实证明这很简单。您只需将queryset 函数添加到您的RelatedInline 类,指定要显示的内联。如果返回的查询集至少有一个成员,将显示第一个。如果查询集为空,将显示一个空白内联!

class RelatedInline(admin.StackedInline):
    model = Related
    exclude = ('author',)
    max_num = 1

    def queryset(request):
        return Related.objects.filter(author = request.user)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2018-09-17
    • 2017-05-22
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多