Django - 在管理员中分配m2m关系
在我创建的应用程序中,一些用户具有“编码器”角色并分配给“分配”。
我似乎无法正常工作的是管理员将工作分配给工作分配的过程。Django - 在管理员中分配m2m关系
这里是模型的代码我迄今(可能是完全错误的):
class Coder(models.Model):
"""Every user can be a coder. Coders are assigned to Assignments"""
user = models.OneToOneField(User)
class Admin:
list_display = ('',)
search_fields = ('',)
def __unicode__(self):
return u"Coders"
class Assignment(models.Model):
"""(Assignment description)"""
title = models.CharField(blank=True, max_length=100)
start_year = models.IntegerField(blank=True, null=True)
end_year = models.IntegerField(blank=True, null=True)
country = models.IntegerField(blank=True, null=True)
coders = models.ManyToManyField(Coder)
class Admin:
list_display = ('',)
search_fields = ('',)
def __unicode__(self):
return u"Assignment"
这是管理代码:
class AssignmentCoderInline(admin.StackedInline):
model = Assignment.coders.through
can_delete = False
verbose_name_plural = 'coder'
class AssignmentAdmin(admin.ModelAdmin):
fieldsets = [
('Assignment', {'fields': ['title', 'start_year', 'end_year']})
]
inlines = (AssignmentCoderInline,)
class CoderInline(admin.StackedInline):
model = Coder
can_delete = False
verbose_name_plural = 'coder'
现在,当我在admin,我想创建一个任务并为其添加编码器。 然而,所有我看到试图这样做的时候是这样的:
我怎么能一个编码器/用户添加到任务,所以我后来让他可以在一个视图中的所有他的任务? 这可能是一个非常愚蠢的问题,但请回答,无论如何,我非常感谢任何帮助:)
如果我没有弄错,它看起来像你想调用一个视图编码器,然后显示所有为用户分配。
首先,我可能会先分配一个related_name给编码器和赋值模型之间的关系,以便以后可以很容易地引用它们。
class Assignment(models.Model):
coders = models.ManyToManyField(Coder, related_name='assignments')
class Coder(models.Model):
user = models.OneToOneField(User, related_name="coder")
我倒是然后使用引用用户在模板这样的one to one relationship:
{% for assignment in user.coder.assignments.all %}
而且,貌似问题是你如何得到YOUT模式设置。在查看“models.Model”类和“ModelBase”类的django.db.models.base
之后,看起来没有“Admin”子类。你可能想要删除那些开始。
接下来,__unicode__
字段显示表示屏幕上的对象的默认可见值。在这种情况下,你已经迫使它成为“编码器”。如果您有5个编码器,您可以看到“编码器,编码器,编码器,编码器,编码器”而不是“admin,user1,bob22,harry8,stadm1in”等。让我们重写unicode以显示更多内容有意义的。由于编码器字段只包含用户字段,因此请参考self.user.username
。我们也会将Assignment()
的unicode更改为self.title
。
ModelForm没有'Admin'子类,所以让我们删除它。
MODELS:
class Coder(models.Model):
"""Every user can be a coder. Coders are assigned to Assignments"""
user = models.OneToOneField(User, related_name='coder')
def __unicode__(self):
return self.user.username
class Assignment(models.Model):
"""(Assignment description)"""
title = models.CharField(blank=True, max_length=100)
start_year = models.IntegerField(blank=True, null=True)
end_year = models.IntegerField(blank=True, null=True)
country = models.IntegerField(blank=True, null=True)
coders = models.ManyToManyField(Coder, related_name='assignments')
def __unicode__(self):
return self.title
ADMIN:
class AssignmentCoderInline(admin.StackedInline):
model = Assignment.coders.through
can_delete = False
# verbose_name_plural = 'coder'
class AssignmentAdmin(admin.ModelAdmin):
fieldsets = [
('Assignment', {'fields': ['title', 'start_year', 'end_year']})
]
inlines = (AssignmentCoderInline,)
这很有帮助,谢谢! 虽然我没有回答我的问题:我如何将一个或多个用户(=编码员)分配给管理员的任务?这是行不通的,我真的很想知道如何让它工作:) – LukasKawerau 2013-04-20 09:30:21
好吧,看起来你已经有了这个设置。当您转到后端管理面板中的分配时,http://i.stack.imgur.com/Omhuu.png允许您将更多编码器(多个编码器)添加到单个分配中。如果我没有错,那就是你要找的东西。 – 2013-04-20 09:33:20
另外,它可能是您将__unicode__作为“编码器”返回的事实。请注意,如果您在pastebin.com代码段中共享整个admin.py和models.py, – 2013-04-20 09:35:21