2016-07-19 6 views
0

私はモデルをリンクするためにForeignKeyを使用しています。 ForeignKeysではないフィールドでフィールドが動作します。QuerySetが発生しました:関連フィールド無効な参照があります:icontains

私のモデルの項目をフィルタリングして、クエリーセットと一致するフィールドのみを表示したいとします。 しかし、クエリセット提起:関連分野では、無効な検索を得た:icontains

は助けてください。以下は私のモデルとビュー

マイモデル

class Category(models.Model): 
    category = models.CharField(max_length=200, default='', blank=True, null=True) 
    def __unicode__(self): 
     return self.category 

class StoreItems(models.Model): 
    item_name = models.CharField(max_length=200, default='', blank=True, null=True) 
    def __unicode__(self): 
     return self.item_name 

class Supplier(models.Model): 
    supplier_name = models.CharField(max_length=200, default='', blank=True, null=True) 
    def __unicode__(self): 
     return self.supplier_name 

class Unit(models.Model): 
    unit = models.CharField(max_length=200, default='', blank=True, null=True) 
    def __unicode__(self): 
     return self.unit 





class Store(models.Model): 
    category = models.ForeignKey(Category, blank=True, null=True) 
    item_name = models.ForeignKey(StoreItems, blank=True, null=True) 
    quantity = models.IntegerField(default='', blank=True, null=False) 
    receive_amount = models.IntegerField(blank=True, null=True) 
    receive_by = models.CharField(max_length=120, default='', blank=True, null=False) 
    issue_amount = models.IntegerField(blank=True, null=True) 
    issue_by = models.CharField(max_length=120, default='', blank=True, null=True) 
    issue_to = models.CharField(max_length=120, default='', blank=True, null=True) 
    supplier_name = models.ForeignKey(Supplier, blank=True, null=True) 
    created_by = models.CharField(max_length=15, default='', blank=True, null=True) 
    unit = models.ForeignKey(Unit, blank=True, null=True) 
    reorder_level = models.IntegerField(default='0', blank=True, null=False) 
    export_to_CSV = models.BooleanField(default=False) 
    last_updated = models.DateTimeField(auto_now_add=False, auto_now=True) 

マイビュー

def store_list(request): 
    label = 'STORE' 
    title = 'Select the item you want to filter'  
    heading = 'SEARCH ITEMS' 

    if request.user.is_authenticated(): 
     form = StoreSearchForm(request.POST or None) 
     context = { 
     "title": title, 
     "form": form, 
     "heading": heading, 
     } 
     if request.method == 'POST': 
      queryset = Store.objects.all().order_by('item_name').filter(category__icontains=form['category'].value(), item_name__icontains=form['item_name'].value()) 
      context = { 
      "queryset": queryset, 
      "form": form, 
      } 

    return render(request, "store.html", context) 
+0

なぜあなたは 'icontains'をまったく使っていますか?あなたが言うように、カテゴリはForeignKeyであり、あなたのフォームは文字列ではなく実際のCategoryインスタンスを返しています - 実際のオブジェクトに一致させたい、一致するものを検索するのではありません。 –

+0

また、これは 'form ['field']。value()'とは何ですか?フィールドから値を取得する方法は 'form.cleaned_data ['field']'です。 –

答えて

1

うん、あなたが直接外部キーけど...

にicontainsを使用することはできませんされて
Store.objects.all().order_by('item_name' 
).filter(category__category__icontains=form['category'].value(), item_name__icontains=form['item_name'].value()) 

あなたのカテゴリyモデルはカテゴリとも呼ばれるフィールドを含む。これはcategory__categoryとしてアクセスできます。つまり、上記のようなクエリを使用できます。

関連する問題