rquid
Дек. 19, 2017 07:49:03
Делаю так:
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: разные названия полей
Такое возможно сделать? Хотел использовать один темплэйт, но в зависимости от входных данных разные поля подставлять(проверять по наличию существования).
Elaphe
Дек. 19, 2017 08:15:30
А зачем их из queryset удалять?
Если в у вас есть только q.foo, но нет q.bar, то запись в темплейте {{ q.bar }} не вызовет ошибки, там просто будет пустое место.
Поэтому можно написать:
{{ q.foo }}{{ q.bar }}
И в зависимости от наличия, подставится или первое, или второе, или оба.
Ну или покажите, что вы примерно хотите сделать в темплейте в итоге.
rquid
Дек. 19, 2017 09:23:04
Elaphe, у меня в одной модели оба поля со значениями, если в темлэйте оба указываешь, то оба и будут, а надо в зависимости от переданных данных показывать одно из них в темлэйте.
FishHook, спасибо, забыл про распаковку списков, остался вопрос, когда ForeignKey передаёшь через filter().values(), он отображает id, а хотелось бы значение.
rquid
Дек. 19, 2017 13:10:01
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)
rquid
Дек. 21, 2017 05:45:18
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
незнаю, насколько правильно я делаю, но оно делает, что я хотел. А с defer я тоже пробовал и всё равно поля в темплэйт оба попадали.