1

以下は私のmodels.pyです。問題は、管理パネルUserで、モデルの列が値ではなく値をIngredience指していることです。Ingredience CategoryUser

Ingredienceモデルには2つの外部キーがあります。これが問題かどうかはわかりません。

管理パネルのスクリーンショット:

ここに画像の説明を入力してください

Models.py:

from django.db import models
from django.contrib.auth.models import User

class IngredienceCategory(models.Model):
    name = models.CharField(max_length=30)
    user = models.ForeignKey(User, null=True, blank=True)

    class Meta:
        verbose_name_plural = "Ingredience Categories"

    def __unicode__(self):
        return self.name


class Ingredience(models.Model):
    name = models.CharField(max_length=30)
    category = models.ForeignKey(IngredienceCategory, null=True, blank=True)
    user = models.ForeignKey(User, null=True, blank=True)

    class Meta:
         verbose_name_plural = "Ingredients"

    def __unicode__(self):
        return self.name


class Food(models.Model):
    name = models.CharField(max_length=30)
    ingredients = models.ManyToManyField(Ingredience)
    html_id = models.CharField(max_length=30, null=True, blank=True)
    user = models.ForeignKey(User, null=True, blank=True)

    class Meta:
        verbose_name_plural = "Foods"

    def __unicode__(self):
        return self.name

ここでの問題は何ですか?この問題が発生する前に私が行った手順は次のとおりです。

  • 3つのモデルすべてに列を追加userし、南の移行を実行しました
  • その後、3つのテーブルすべてのユーザー列に手動で値を挿入しました
  • モデルIngredienceCategoryFood正常に動作する(つまり、Userドロップダウンリストにユーザーのリストを表示する)
  • SQLは次のとおりです:http://pastebin.com/3mHpXA3F

編集: 追加するもの(この問題の解決に役立つ可能性があります):管理パネルの成分モデルの[ユーザー]列の横にあるプラス記号(+)をクリックすると、新しいユーザーを追加するためのポップアップフォームが表示されます。表示されますが、これは正しいです。

編集2: admin.pyファイルの関連部分:

class IngredienceAdmin(admin.ModelAdmin):
    search_fields = ('name',)
    list_filter = ('category',)
    ordering = ('name',)

#    def formfield_for_foreignkey(self, db_field, request, **kwargs):
#        #if db_field.name == 'ingrediencecategory':
#        kwargs['queryset'] = IngredienceCategory.objects.order_by('name')
#        return super(IngredienceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'ingrediencecategory':
            kwargs['queryset'] = IngredienceCategory.objects.order_by('name')
            return super(IngredienceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

        if db_field.name == 'user':
            kwargs['queryset'] = User.objects.order_by('name')
            return super(IngredienceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
4

2 に答える 2

0

私自身の質問に答えます。誰かが同様の問題に遭遇した場合、ここに実用的な解決策(admin.py)があります:

class IngredienceAdmin(admin.ModelAdmin):
    search_fields = ('name',)
    list_filter = ('category',)
    ordering = ('name',)

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'ingrediencecategory':
            kwargs['queryset'] = IngredienceCategory.objects.order_by('name')

        if db_field.name == 'user':
            kwargs['queryset'] = User.objects.order_by('username')

        return super(IngredienceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
于 2012-11-05T21:11:15.387 に答える
0

管理モデルはどのように見えますか?

あなたのモデルは問題ないように見えますが、なぜこの問題が発生するのかわかりません。1 つのモデルで複数の外部キーを持つことができますが、それは正常です。

それらをプロジェクトに投入して(空の管理モデルで)見てみましたが、これを再現できませんでした。

于 2012-11-05T12:35:30.550 に答える