簡體   English   中英

Django外鍵關系

[英]Django foreign key relation

我最近開始使用Python和Django來制作網站,但遇到了一個我無法解決的問題。

您可以肯定,這是由於我完全沒有經驗,而我卻忽略了一些簡單的事情或做了一些愚蠢的事情,但是哦。

在我的網站上,我有一個頁面來顯示有關食譜的詳細信息(說明,成分,說明等)。 我正在這樣顯示:

views.py
class RecipeView(generic.DetailView):
    model = recipe
    template_name = 'whatsfordinner/recipe.html'
    context_object_name = 'details'

到目前為止,我已經能夠顯示我的單個信息,沒問題({{details.whatever}})

我的問題是指令和成分都作為外鍵關系存儲在我的數據庫中,因此需要以不同的方式輸出。 我的數據庫如下所示:

class recipe(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField(default="No decsription added")
    image = models.ImageField(upload_to='images/',
                                        default='images/default.jpg')
    total_favourites = models.IntegerField()
    servings = models.IntegerField()

    def __str__(self):
        return self.title

class ingredients(models.Model):
    recipe = models.ForeignKey(recipe)
    ingredient = models.CharField(max_length=255)

我很難為我選擇的食譜輸出相關的食材,我很樂意提供一些指導。

對於配方對象,說r

r.ingredients_set.all()將列出與該食譜鏈接的所有成分。

您可以對此進行進一步過濾: r.ingredients_set.filter(title__startswith='clover')

Django文檔中有完整的指南: https : //docs.djangoproject.com/en/1.9/topics/db/examples/many_to_one/

假設您想要在您的views.py中列出食譜的所有成分的清單:

ingredient_list = r.ingredients_set.all()

然后將上下文字典中的Ingredient_list傳遞給模板。 如果您不知道上下文字典是什么,那么您在做什么,請閱讀Django文檔! 很多人都在花很多精力來創建漂亮的文檔。

假設context['ingredients'] = ingredient_list ,其中context是您要傳遞給模板html的上下文字典。 然后在您的模板中,使用Django模板語言執行以下操作:

{% for i in ingredients %}
  <p>{{ i.ingredient }}</p>
{% endfor %}

這里ingredientsingredient_list您使用上下文傳遞字典,並且對於每個成分對象i在for循環中,正在顯示的值<ingredient object i>.ingredient

如果有幫助,這是官方教程的鏈接。 https://docs.djangoproject.com/zh-CN/1.9/intro/tutorial01/

參見此處: https : //docs.djangoproject.com/zh-CN/1.9/topics/class-based-views/generic-display/#adding-extra-context

class PublisherDetail(DetailView):

    model = Publisher


class RecipeView(generic.DetailView):
    model = recipe
    template_name = 'whatsfordinner/recipe.html'
    context_object_name = 'details'

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(RecipeView, self).get_context_data(**kwargs)
        # Add in a QuerySet of all the books
        context['ingredient_list'] = recipe.ingredients_set.all()
        return context

以上未經測試

暫無
暫無

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

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