2013-04-20 36 views
0

在我創建的應用程序中,一些用戶具有「編碼器」角色並分配給「分配」。
我似乎無法正常工作的是管理員將工作分配給工作分配的過程。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,我想創建一個任務併爲其添加編碼器。 然而,所有我看到試圖這樣做的時候是這樣的:
This is what I see in the admin

我怎麼能一個編碼器/用戶添加到任務,所以我後來讓他可以在一個視圖中的所有他的任務? 這可能是一個非常愚蠢的問題,但請回答,無論如何,我非常感謝任何幫助:)

回答

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 %} 

而且,貌似問題是你如何得到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,) 
+0

這很有幫助,謝謝! 雖然我沒有回答我的問題:我如何將一個或多個用戶(=編碼員)分配給管理員的任務?這是行不通的,我真的很想知道如何讓它工作:) – LukasKawerau 2013-04-20 09:30:21

+0

好吧,看起來你已經有了這個設置。當您轉到後端管理面板中的分配時,http://i.stack.imgur.com/Omhuu.png允許您將更多編碼器(多個編碼器)添加到單個分配中。如果我沒有錯,那就是你要找的東西。 – 2013-04-20 09:33:20

+0

另外,它可能是您將__unicode__作爲「編碼器」返回的事實。請注意,如果您在pastebin.com代碼段中共享整個admin.py和models.py, – 2013-04-20 09:35:21