Форум сайта python.su
Делаю так:
fields = [field.name for field in model._meta.fields] fields.remove('name_of_field') q_resp = model.objects.filter(fields=fields) return render(req,'template.html', {'q_resp': q_resp}
FieldError at %url% Cannot resolve keyword 'fields' into field. Choices are: разные названия полей
Офлайн
А зачем их из queryset удалять?
Если в у вас есть только q.foo, но нет q.bar, то запись в темплейте {{ q.bar }} не вызовет ошибки, там просто будет пустое место.
Поэтому можно написать:
{{ q.foo }}{{ q.bar }}
И в зависимости от наличия, подставится или первое, или второе, или оба.
Ну или покажите, что вы примерно хотите сделать в темплейте в итоге.
Отредактировано Elaphe (Дек. 19, 2017 08:16:37)
Офлайн
fields = {} field["date__gt"] = date fields["type"] = "product" model.objects.filter(**fields)
Офлайн
Elaphe, у меня в одной модели оба поля со значениями, если в темлэйте оба указываешь, то оба и будут, а надо в зависимости от переданных данных показывать одно из них в темлэйте.
FishHook, спасибо, забыл про распаковку списков, остался вопрос, когда ForeignKey передаёшь через filter().values(), он отображает id, а хотелось бы значение.
Офлайн
Ну тогда так:
{% if q.foo %}{{ q.foo }}{% else %}{{ q.bar }}{% endif %}
Отредактировано Elaphe (Дек. 19, 2017 09:49:19)
Офлайн
Elaphe, q.foo всегда будет true, ибо всегда есть значения в этих полях weight_load models.FloatField(default=0), weight_unload = models.FloatField(default=0), я доку читаю, просто ещё не освоился
class Race(models.Model): id_race = models.AutoField(primary_key=True) name_race = models.CharField(max_length=5, default='Рейс') race_date = models.DateField(default=date.today) car = models.ForeignKey(Car) driver = models.ForeignKey(Driver) type_ship = models.BooleanField(default=0) supplier = models.ForeignKey(Supplier) customer = models.ForeignKey(Customer) shipment = models.ForeignKey(Shipment, null=True, blank=True) product = models.ForeignKey(Product) mediator = models.ForeignKey(Mediator, null=True, blank=True) s_milage = models.FloatField(default=0) e_milage = models.FloatField(default=0) weight_load = models.FloatField(default=0) weight_unload = models.FloatField(default=0) comm = models.TextField(null=True, blank=True) state = models.IntegerField(default=0) create_time = models.DateTimeField(auto_now=True)
Офлайн
Офлайн
Elaphe, я же решил уже вот так:
fields = [field.name for field in Race._meta.fields] fields.remove('weight_load') q_resp = Race.objects.filter(customer__inn__exact=req.POST.get('inn'), race_date__range=[req.POST.get('from'), req.POST.get('to')]).values(*fields) for obj in q_resp: obj['car'] = Car.objects.get(id_car=obj.get('car')).number obj['product'] = Product.objects.get(id_product=obj.get('product')).name
Офлайн