所有。我正在为我的django网站管理员工作,而且我遇到了障碍。
我有一个Entry
模型和一个Related
模型。 Related
模型有两个外键字段:一个用于Entry
模型(entry
),另一个用于django的User
模型(author
)。 Related
模型被视为Entry
模型的“子模型”,每个用户每Related
只能有一个Entry
。
在管理员中,Related
与Entry
内联编辑。我拥有它,管理员一次只显示一个额外的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()
问题在于,如果用户想要编辑已由任何人创建Related
的条目,则只会显示该相关字段。
如果可能的话,我想知道是否有人对如何保持与此类似的设置有任何想法,但让管理员自动显示用户related
(如果存在)和空表单(如果不存在)。除此之外,我只想摆脱行max_num = 1
并将其替换为extra = 1
。当然,这意味着即使用户已经有一个用于当前条目的“新相关”表单也会显示,所以我想知道是否有人知道如何捕获可能的IntegrityError
并让用户知道发生了错误。
答案 0 :(得分:0)
事实证明这很简单。您只需要在queryset
类中添加RelatedInline
函数,指定要显示的内联。如果返回的查询集至少有一个成员,则会显示第一个成员。如果查询集为空,将显示一个空白内联!
class RelatedInline(admin.StackedInline):
model = Related
exclude = ('author',)
max_num = 1
def queryset(request):
return Related.objects.filter(author = request.user)