0

在我正在构建的应用程序中,一些用户具有“编码器”角色并被分配到“分配”。
我似乎无法开始工作的是管理员将编码员分配给作业的过程。

这是我到目前为止的模型代码(可能完全错误):

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'

现在,当我在管理员中时,我想创建一个作业并向其中添加编码器。然而,当我尝试这样做时,我看到的只是:
这是我在管理员中看到的

如何将一名编码员/用户添加到作业中,以便稍后在视图中向他展示他拥有的所有作业?这可能是一个非常愚蠢的问题,但无论如何请回答,我非常感谢任何帮助:)

4

1 回答 1

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")

然后我会使用一对一的关系在模板中引用用户:

    {% for assignment in user.coder.assignments.all %}

此外,看起来问题在于您如何设置模型。在查看了django.db.models.base“models.Model”类和“ModelBase”类之后,看起来没有“Admin”子类。您可能希望从一开始就删除它们。

接下来,该__unicode__字段显示代表屏幕上对象的默认可见值。在这种情况下,您已将其强制为“编码器”。如果您有 5 位编码员参与一项作业,您会看到“编码员、编码员、编码员、编码员、编码员”而不是“admin、user1、bob22、harry8、stadm1in”等。让我们覆盖unicode以显示更有意义的内容。由于 coders 字段只有 user 字段,让我们引用它self.user.username。我们也将Assignment()'s 的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,)
于 2013-04-20T08:56:29.497 回答