簡體   English   中英

Django-過濾外鍵

[英]Django - filtering on foreign key

我在Django中有一個關於filter的問題。 請幫我。 當我單擊l.category_name時,我想顯示具有不同類別的產品對象

我的html(CategoryList.html):

{% for l in forms %}
<a href="/myapp/categorylist/{{l.category_id}}"><h2>{{ l.category_name }}</h2></a>
{% endfor %}

CategoryView.html

{{get_product.product_name}}

我的模特:

class Category(models.Model):
    category_id = models.AutoField(primary_key = True)
    category_name = models.CharField(max_length = 20)

    def __unicode__(self):
        return self.category_name

class Product(models.Model):
    product_id = models.AutoField(primary_key = True)
    product_name = models.CharField(max_length = 50)
    product_category = models.ForeignKey(Category)
    product_color = models.CharField(max_length = 30)
    def __unicode__(self):
        return self.product_name

我的觀點:

def category_list(request):
    list = Category.objects.all()
    context = {'forms':list}
    return render(request,'webpage/CategoryList.html',context)

def category_view(request,category_id):
    all = Product.objects.all()
    if request.POST:
        get_id = Category.objects.get(category_id = request.POST['category_id'])
        get_category = Product.objects.get(product_category =
                                           request.POST['product_category'])
        get_category.product_category = get_id
        get_category.save()
        if get_category:
            get_product = Product.objects.filter(product_category__category_name =
                                                 request.POST['category_name'])

    context = {'get_product':get_product}
    return render(request,'webpage/CategoryView.html',context)

我在https://docs.djangoproject.com/en/1.6/topics/db/queries/中閱讀了文檔,但我聽不懂。我知道我錯了category_view

您的代碼似乎有很多問題。

首先,您不必在代碼中聲明ID。 Django會自動為您執行此操作。 因此, categor_idproduct_id是不必要的。

其次,刪除.POST檢查。 您什么都沒張貼。

第三,

get_id = Category.objects.get(category_id = request.POST['category_id']) # returns a category, not an id
get_category = Product.objects.get(product_category =
                                       request.POST['product_category']) # returns the product list, not a category
get_category.product_category = get_id

是相同的

category = Category.objects.get(category_id = request.POST['category_id'])
product_list = Product.objects.get(product_category = category)

第四,不要在模板中對URL進行硬編碼。 請改用{% url %}標簽。

最后,您可以將該product_list傳遞給模板

context = {'product_list':product_list}
return render(request,'webpage/CategoryView.html',context)

外鍵的存儲方式是通過自動字段(ID)。 由於“類別”是“產品”的外來字段,因此當您進行記錄條目時,類別的ID存儲在產品表的“產品類別”字段中。

我認為您的代碼有些混亂,因為您正在嘗試執行django為您自動完成的操作。 就像,一旦定義了外鍵,外鍵表記錄的ID就會自動存儲,您不必獲取“類別”條目的ID並將其存儲在產品表條目中。

您想要實現的目標很簡單,可以說您擁有category_name,而沒有別的,獲取category表條目的id,

category_object = Category.objects.get(category_name = category_name)
category_id = category_object .id

如果您已經具有類別的ID,則可以跳過上述步驟,只需使用ID查詢產品表即可獲取所需的記錄。

Product.objects.filter(product_category = category_id)

在模板中,您可以遍歷這些產品記錄並顯示所需的內容。

順便說一句,使用.update()方法更新任何字段,而不是save()方法。

像這樣:Entry.objects.all()。update(blog = b)

值得您花時間閱讀查詢幫助。 Django查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM