как присвоить результат поиска с __iexact значению внешнего ключа django - PullRequest
0 голосов
/ 09 июля 2020

Мне нужно присвоить результат поиска с __iexact значению внешнего ключа

class ListInfo(models.Model):
    admin = models.ForeignKey(User,on_delete=models.CASCADE)
    name= models.ForeignKey(NameList,on_delete=models.CASCADE,blank=True)
    #others


class NameList(models.Model):
    admin = models.ForeignKey(User,on_delete=models.CASCADE)
    name = models.CharField(max_length=60)
    #others

Я хочу создать объект из ListInfo со значением по умолчанию name, которое назначено результату имени поиска! а это мой views.py

def addNewNameInfo(request):
    qs = NameList.objects.values_list('name',flat=True)
    name = request.GET.get('name')
    name_info = NameList.objects.filter(name__iexact=name)
    add_new_name_info =ListInfoForm()
    if request.method == 'POST':
        add_new_name_info = ListInfoForm(request.POST)
        if add_new_name_info .is_valid():
            obj = add_new_name_info .save(commit=False)
            obj.admin = request.user
            obj.name= name_info.name # i also tried this : obj.name= request.GET.get('name')
            obj.save()
            messages.success(request,'created')
    return render(request,'myfolder/my_template.html',{'names':qs,'name_info':name_info,'add_new_name_info':add_new_name_info })

и это мой шаблон

<form method='GET'>
   <select name="name" class="form-control" id="type">
      <option selected="true" disabled="disabled">names</option>
        {% for value in names %}
      <option  value="{{value}}">{{ value }}</option>
         {% endfor %}
     </select>
   <button type="submit">search</button>
 </form>
 <!--then -->
   {% if name_info%}
     {% for i in name_info%}
      <!--return some information about the selected name -->
     {% endfor %}
    {% endif %}
  
    {% if name_info%}
       <form method="POST">{% csrf_token %}
          {{add_new_name_info.errors}}
          <ul>
             {{add_new_name_info.as_p}}
          </ul>
          <button type="submit">save</button>
</form>
    {% endif %}

но он вызывает th

объект QuerySet не имеет атрибута name

в то время как у меня имя в моем NameList? можем ли мы сделать что-то подобное, чтобы присвоить значение из запроса GET значению внешнего ключа? спасибо

1 Ответ

1 голос
/ 09 июля 2020

В этой строке
name_info = NameList.objects.filter(name__iexact=name)

вы не получаете конкретный c элемент, вы получаете набор запросов (который является повторяемым, django использует для обертывания выполняемого запроса БД при вызове).

, поскольку это итерация объектов NameList, вы не можете получить доступ к атрибуту .name, вам нужно либо перебрать каждый из объектов NameList, возвращаемых набором запросов, либо изменить свою базу данных запрос на использование NameList.objects.get(), который возвращает единственный объект NameList (или выдает исключение NameList.DoesNotExist, если не может найти тот, который вам нужен)

Подробнее о django API QuerySet можно узнать здесь: https://docs.djangoproject.com/en/3.0/ref/models/querysets/

...