2013-04-20 2 views
0

일부 사용자는 "Coder"역할을 담당하며 "Assignments"에 할당됩니다.
내가 작업 할 수없는 것은 관리자가 할당에 코더를 할당하는 프로세스입니다.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' 

여기

는 지금까지 (아마 완전히 잘못된)이 모델 - 코드입니다 관리자, 과제를 만들고 코더를 추가하고 싶습니다. 아직 그렇게 할 때 내가 보는 모든이있다 :
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"대신 "Coders, Coders, Coders, Coders, Coders"가 표시됩니다. 유니 코드을 덮어 씁니다. 의미있는. 코더 필드에는 사용자 필드 만 있기 때문에 self.user.username으로 참조하십시오. Assignment()유니 코드에서 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

+0

글쎄, 당신은 이미 그 설정을 가지고있는 것처럼 보입니다. 백엔드 관리 패널의 과제물로 이동하면 http://i.stack.imgur.com/Omhuu.png에서 더 많은 코더 (다중 코더)를 단일 과제에 추가 할 수 있습니다. 내가 잘못 본 것이 아니라면 그것이 당신이 찾고있는 것입니다. –

+0

또한 "코더"로 __unicode__을 반환한다는 사실이있을 수 있습니다. 전체 admin.py 및 models.py를 pastebin.com 스 니펫에 공유하면 어떻게됩니까? –

관련 문제