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'

今、私が管理者になっているときに、割り当てを作成してコーダーを追加したいと考えています。それでも、そうしようとしたときに私が見るのはこれだけです:
これは私が管理者に表示するものです

1 人のコーダー/ユーザーを割り当てに追加して、後で彼が持っているすべての割り当てをビューで表示できるようにするにはどうすればよいですか? これはおそらく本当にばかげた質問ですが、とにかく答えてください。助けていただければ幸いです:)

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

次に、 1 対 1 の関係を使用して、テンプレートでユーザーを参照します。

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

また、問題はyoutモデルのセットアップ方法にあるようです。「 models.Model django.db.models.base」クラスと「ModelBase」クラスを確認したところ、「Admin」サブクラスがないようです。おそらく、最初にそれらを削除することをお勧めします。

次に、__unicode__フィールドには、画面上のオブジェクトを表すデフォルトの表示値が表示されます。この場合、強制的に「コーダー」にしました。割り当てに 5 人のコーダーがいる場合、「admin、user1、bob22、harry8、stadm1in」などではなく、「Coders, Coders, Coders, Coders, Coders」と表示されます。Unicode をオーバーライドして、より意味のあるものを表示しましょ。coders フィールドには user フィールドしかないので、 で参照しましょうself.user.usernameAssignment()ユニコード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 に答える