在我正在构建的应用程序中,一些用户具有“编码器”角色并被分配到“作业” 我似乎无法工作的是管理员将编码器分配给分配的过程。
这是我到目前为止的模型代码(可能完全错误):
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'
现在,当我在管理员中时,我想创建一个作业并为其添加编码器。 然而,我在尝试这样做时所看到的只有:
如何在作业中添加一个编码器/用户,以便稍后在视图中向他显示他所拥有的所有作业? 这可能是一个非常愚蠢的问题,但无论如何请回答,我非常感谢任何帮助:)
答案 0 :(得分:1)
如果我没有弄错,看起来你想给编程人员打电话,然后显示一个用户的所有作业。
首先,我可以首先为编码器分配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 %}
此外,看起来问题是你如何设置模型。在查看“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,)