0

ID、number、およびtypeというプロパティを持つ「Product」というクラス モデルがあります。 ここに画像の説明を入力

class Product(models.Model):
        PRODUCT_TYPES = (
                ('CW', 'Casement Window'),
                ('BA', 'Bunny Advance'),
                ('EW', 'Enterprise Wadoo'),
                ('T3', 'Type 3')
                )

        number = models.CharField(max_length=50)
        type = models.CharField(max_length = 2 , choices=PRODUCT_TYPES)

ID、番号、およびproduct_idによる「製品」へのリンクというプロパティを持つ「プロジェクト」と呼ばれるクラスモデルがあります。

ここに画像の説明を入力

class Project(models.Model):
    number = models.CharField(max_length=50)
    product = models.ForeignKey(Product)

ここがややこしいところです: 私はクリスピー フォームとオートコンプリートを使用して値を表示および編集します。オートコンプリートは、プロジェクト モデルの値に基づいています。したがって、製品のタイプの適切性を表示および編集するには、プロジェクト モデルに適切なタイプを追加する必要があります。

ここに画像の説明を入力

質問:

  1. models.ForeignKey を通常のフィールドに使用することは可能ですか? そのような :

    type = models.ForeignKey(Product,related_name='type')

  2. ループを使用してすべての製品を反復処理し、ID を比較しようとしましたが、次のメッセージが表示されました:「'ModelBase' オブジェクトは反復可能ではありません

    def test(id_product):
       for p in Product:
           if p.number == id_product:
               return p.type
    

編集:可能な限り、プロジェクト内の製品の TYPE にアクセスできるようにする必要があります。

4

2 に答える 2

0

編集:可能な限り、プロジェクト内の製品の TYPE にアクセスできるようにする必要があります。

また、問題が何であるか正確にはわかりません。通常どおりアクセスできませんか。

<my-project-instance>.product.type

プロジェクト内の製品タイプにアクセスします。

編集: Projectのインスタンスを使用していることを確認してください。クラス名を使用しているため、以下のコメントは失敗しています。

于 2013-09-18T16:09:39.277 に答える
0

あなたが達成しようとしていることを理解するのに苦労しています。ただし、オブジェクトをループすることはできませんが、

for p in Products.objects.all():
    ....

十分に機能するはずです。ProductProjectwhen Projecthas ForeignKeytoの両方を入力するProductのは少し多すぎるように思えます。

編集:

それでも意味がありませんが、テストメソッドは次のようなものを生成する必要があります

return Products.objects.get(type=id_product)
于 2013-09-18T15:26:53.457 に答える