首页 > 解决方案 > 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)

标签: djangosplit

解决方案


在理解了需要完成什么之后,似乎解决方案只是将所需的逗号添加到模板中,修改 forloop 如下:

{% for ingredient in drink.ingredients.all %}} 
   {{ingredient.ingredient_name}}{% if not forloop.last %},{% endif %}
{% endfor %}

推荐阅读