django - Django 'CharField' 对象没有属性拆分
问题描述
我正在创建一个网站,用户可以在其中按成分搜索食谱。我希望当用户最终看到食谱时,那里的成分会在视图中用“,”分割。现在它只是空间。我试图在我的模型中执行此操作,但我得到了标题中的错误 - 'CharField' 对象没有属性拆分。
楷模:
from django.db import models
class Ingredient(models.Model):
ingredient_name = models.CharField(max_length=250)
igredient_name1 = ingredient_name.split(', ')
def __str__(self):
return self.ingredient_name1
class Recipe(models.Model):
recipe_name = models.CharField(max_length=250)
preparation = models.CharField(max_length=1000)
ingredients = models.ManyToManyField(Ingredient)
def __str__(self):
return self.recipe_name
模板:
<div>
<h1><a href="/">Drink drank drunk</a></h1>
</div>
{% for drink in results %}
<div>
<p>{{ drink.recipe_name }}</p>
<p>Preparation: {{ drink.preparation }}</p>
<p>Ingredients:
{% for ingredient in drink.ingredients.all %}
{{ingredient.ingredient_name}}
{% endfor %}
</p>
</div>
{% endfor %}
看法:
def drink_list(request):
template = "drinks/drink_list.html"
return render(request, template)
def search_results(besos):
query = besos.GET.get('q')
q = Q()
for queries in query.split(', '):
q |= (Q(ingredients__ingredient_name__icontains=queries))
results = Recipe.objects.filter(q)
template = "drinks/search_results.html"
context = {
'results' : results,
}
return render(besos, template, context)
解决方案
在理解了需要完成什么之后,似乎解决方案只是将所需的逗号添加到模板中,修改 forloop 如下:
{% for ingredient in drink.ingredients.all %}}
{{ingredient.ingredient_name}}{% if not forloop.last %},{% endif %}
{% endfor %}
推荐阅读
- angular - NGINX - 将所有主机 / 应用程序 / * 重写和代理到 cdn
- mysql - 迁移返回错误中的laravel外键
- android-studio - Android Studio 未将 Chrome 显示为 Flutter 设备
- java - 获取每个线程的线程组信息
- ruby-on-rails - Link_to remote:true 不渲染部分
- python - QT QFileDialog.getOpenFileName 取消崩溃
- javascript - 如果我收到一个没有数据的数据包怎么办?(Socket.IO Javascript)
- python - 在 python 代码中出现错误:“RuntimeError: No active exception to reraise”
- sql - HSQL 2.3.6 外连接语法
- printing - arduino中的打印格式