【发布时间】:2010-09-23 19:36:04
【问题描述】:
全部。我正在为我的 django 网站做管理员,我遇到了一个障碍。
我有一个Entry 模型和一个Related 模型。 Related 模型有两个外键字段:一个到 Entry 模型 (entry) 和一个到 django 的 User 模型 (author)。 Related 模型被认为是Entry 模型的“子模型”,每个用户每个Entry 只能有一个Related。
在管理员中,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()
问题是,如果用户想要编辑一个已经有 anyone 的 Related 的条目,那么只会显示一个相关字段。
如果可能的话,我想知道是否有人对我如何保持与此类似的设置有任何想法,但让管理员自动显示用户的related(如果存在),如果不存在则显示空表单。除此之外,我会去掉max_num = 1 并用extra = 1 替换它。当然,这意味着即使用户已经有一个用于当前条目的“新相关”表单也会显示,所以我想知道是否有人知道我将如何捕捉可能的IntegrityError 并让用户知道发生了错误。
【问题讨论】:
标签: django django-admin