@pydjango

Страница 424 из 1273
Pavel
06.08.2017
16:06:31
т.е. если отправить json, то придеться этому json дать имя

Artem
06.08.2017
16:06:50
да, верно! и если надо файл, то в качестве ключа указываешь например: —----WebKitFormBoundaryPfKUrmBd9vRwp5Rb Content-Disposition: form-data; name="picture" <here file>

ааа

Pavel
06.08.2017
16:09:16
вот запрос я отправил на сервер, но сервер сам не узнает, где там искать json

Google
Artem
06.08.2017
16:09:27
а зачем прям жысон шлешь? шли туда поле

Pavel
06.08.2017
16:09:34
у меня сериализотор по модели сейчас сделан

Artem
06.08.2017
16:09:51
карч, есть фича: - ast

потому вот пример: if multipart: import ast sales = [] tmp_sales = mobile_data.getlist('sale[]') for sale in tmp_sales: i = sale.replace("'", '"') sales.append(ast.literal_eval(i))

Pavel
06.08.2017
16:10:52
вот так?

Artem
06.08.2017
16:10:57
ast приведет твою строку ччерез eval, и будет на выходе норм словарь

Дааа, то что ннада

Pavel
06.08.2017
16:12:04
ага, но есть проблема. Если я отправлю null, то сервер парсит как строку. А мне нужен null, как в json, чтобы парсер понял, что null нужно перевести в None и сделать null в БД

Artem
06.08.2017
16:12:46
тогда используй ast

и скармливай туда ту часть строки

Pavel
06.08.2017
16:13:28
поэтому я и хочу отправить в одном запросе файл + чистый валидный json. Просто в DRFиз коробки нельзя такое распарсить, нужно чутка дописать

Artem
06.08.2017
16:14:11
чувак, я тебе говорю, используй ast, который тебе любую строку приведет к нормальным данным

Pavel
06.08.2017
16:14:12
хорошо, попробую ast

Google
Artem
06.08.2017
16:14:22
ast.literal_eval(i)

я так лист со словарями разбираю, отлично работает

Pavel
06.08.2017
16:15:22
хорошо, спасибо

Artem
06.08.2017
16:15:47
пожалйста

Bob
06.08.2017
16:19:19
Да, прикольно, заглянул в доку (про ast)

Roman
06.08.2017
16:43:24
Были на маке у кого такие проблемы? https://stackoverflow.com/questions/45534078/importerror-no-module-named-distribute-setup

Artem
06.08.2017
16:53:06
Были на маке у кого такие проблемы? https://stackoverflow.com/questions/45534078/importerror-no-module-named-distribute-setup
это ж какие времена, что ставились с портов. Давно есть же brew

Roman
06.08.2017
17:00:42
это ж какие времена, что ставились с портов. Давно есть же brew
ну порты в 50 раз болььше пакетов имеет и я использую хотя бы 10 тех которых в брю нету

да и они активные ) так что че тут выпенриватся то

Ruslan
06.08.2017
17:04:15
сможете помочь

Roman
06.08.2017
17:08:07
фигасе тут драмы Thank you for your attention to this. As it says in the distribute documentation at ​​http://pythonhosted.org/distribute/, "Distribute is a deprecated fork of the Setuptools project. Since the Setuptools 0.7 release, Setuptools and Distribute have merged and Distribute is no longer being maintained." At one time, py*-setuptools was replaced by py*-distribute. More recently, this was undone, and py*-distribute was replaced by py*-setuptools. The py27-pytools install does not fail for me in the same way, probably because of fixes made to setuptools, but the build output shows it is not behaving correctly:

Ruslan
06.08.2017
17:11:03
есть моделька: ` class Question(models.Model): NEW = 'New' ACTIVE = 'Active' ENDED = 'Ended' STATE = ( (NEW, 'Новый'), (ACTIVE, 'Активный'), (ENDED, 'Конечный'), ) question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') state = models.CharField(max_length=6, choices=STATE, default=NEW) def str(self): return self.question_text ` есть admin.py ` def change_view(self, request, object_id, form_url='', extra_context=None): State = Question.objects.get(pk=object_id).state QuestionInLine.readonly_fields = '' if State == 'New': QuestionChoice.inlines = [QuestionInLine, ] QuestionInLine.exclude = ('votes', ) form = QuestionForm if State == 'Active': QuestionChoice.inlines = [QuestionInLine, ] QuestionInLine.readonly_fields = (Question, ) QuestionInLine.exclude = '' if State == 'Ended': QuestionChoice.inlines = '' return super(QuestionChoice, self).change_view(request, object_id, form_url, extra_context) ` отображение колонок меняется в зависимости от статуса State (какие-то показываются, какие-то нет) есть функция: ` def formfield_for_choice_field(self, db_field, request, **kwargs): if db_field.name == 'state': kwargs['choices'] = ( ('NEW', 'Новый'), ('ACTIVE', 'Активный'), ) kwargs["queryset"] = Question.objects.filter(state = 'New') return super(QuestionChoice, self).formfield_for_choice_field(db_field, request, **kwargs) ` которая меняет значения choice (выбора) как мне в зависимости от текущего значения (Новый, Активный, Конечный) отдавать ограниченный выбор choice

как мне object_id дернуть в formfield_for_choice_field

Bob
06.08.2017
17:27:28
self.instance.pk ?

Оно?

Ruslan
06.08.2017
17:27:47
а куда его передать?

Bob
06.08.2017
17:28:10
Никуда, оно уже там должно быть

Ruslan
06.08.2017
17:28:14
formfield_for_choice_field у меня будет меняться в зависимости от object_id

Bob
06.08.2017
17:28:50
напиши принт в начале и посмотри что покажет и думай че с этим делать

Ruslan
06.08.2017
17:29:07
а куда он покажет?

Google
Ruslan
06.08.2017
17:29:11
в консоль?

Bob
06.08.2017
17:29:33
да

где dev сервер запущен

Ruslan
06.08.2017
17:29:59
AttributeError: 'QuestionChoice' object has no attribute 'instance'

локально

Bob
06.08.2017
17:31:40
def formfield_for_choice_field(self, db_field, request, **kwargs): print(self.instance.pk) ....

Это имел ввиду

Ruslan
06.08.2017
17:32:25
ошибка

Bob
06.08.2017
17:32:54
Тогда выложи исходник куданить, а то не понятно

Ruslan
06.08.2017
17:33:27
могу тебе в личку скинуть

или в чат

Bob
06.08.2017
17:34:47
codepad.org

Ruslan
06.08.2017
17:54:17
в общем смог из урла дернуть значение pk. Все таки formfield_for_choice_field не передает в тело функции сам объект

это плохо

но видимо так надо

Bob
06.08.2017
17:55:34
ну тож решение, схема url не будет меняться скорее всего

по коду: переменные с заглавных не комильфо

Это только для классов, либо все прописные для констант

kwargs['choices'] = ( ('NEW', 'Новый'), ('ACTIVE', 'Активный'), ) - нужно бы избавиться от дублирования кода, а том потом обслужить будет муторно

Vadim
06.08.2017
19:03:53
Всем привет! Есть вопрос по Django (Django Rest Framework). Вот есть у меня serialiser: class CompanySerializer(serializers.Serializer): id = serializers.IntegerField() name = serializers.CharField(max_length=255, required=True) start_date = serializers.DateField(required=True) description = serializers.CharField() city = serializers.CharField(required=True, max_length=255) owner_id = serializers.IntegerField(required=True, write_only=True) def create(self, validated_data): """ Create company method """ owner_id = validated_data.pop('owner_id', None) company = Company.objects.create(**validated_data) company_member = CompanyMember.objects.create(user_id=owner_id, company_id=company.id, role='owner') return company И ViewSet: class CompaniesListViewSet(viewsets.ViewSet): def create(self, request): """ Creates a new company """ serializer = CompanySerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response({'company': serializer.data}, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) Как я понимаю, если `serializer.is_valid() проходит успешно, а в serializer.save() происходит ошибка, то запрос все равно будет успешным? Исходя из подходов Django и Django Rest Framework как правильно учесть данный нюанс? Сделать метод, отличный от save или всю логику вынести в какой-то другой объект, отвечающий за создание/обновление объектов, а serialiser использовать только для json-ответов? Заранее благодарю!

Google
0x255
06.08.2017
19:15:43
> Как я понимаю, если `serializer.is_valid() проходит успешно, а в serializer.save() происходит ошибка, то запрос все равно будет успешным? нет, вернется 500. > Исходя из подходов Django и Django Rest Framework как правильно учесть данный нюанс? обернуть код в django.db.transaction.atomic (или если речь о вьюхе, то смотри в сторону django.utils.decorators.method_decorator)

0x255
06.08.2017
19:17:44
ну как тебе будет удобно. почитай про транзакции БД

Vadim
06.08.2017
19:18:39
Я вот и хотел обернуть все это транзакцией, но не во вьюхе, а в отдельном объекте который будет валидировать и сохранять, возвращая True/False

Но коллеги говорили, что так не делают, стараются обходится функционалом serializer-ов

Admin
ERROR: S client not available

Bob
06.08.2017
19:19:49
Объект - это некий менеджер?

Vadim
06.08.2017
19:20:02
ну что-то вроде form-object-а Через который будет происходить создание/обновление

0x255
06.08.2017
19:20:49
а зачем? оберни в CompanySerializer.create() и если файл все-таки случается - можешь выводить соответсвующие ошибки хоть словарем

Bob
06.08.2017
19:20:56
я не спец в DRF, но не проще ли дописать сам сериализатор?

amureki
06.08.2017
19:21:44
Всем привет! Есть вопрос по Django (Django Rest Framework). Вот есть у меня serialiser: class CompanySerializer(serializers.Serializer): id = serializers.IntegerField() name = serializers.CharField(max_length=255, required=True) start_date = serializers.DateField(required=True) description = serializers.CharField() city = serializers.CharField(required=True, max_length=255) owner_id = serializers.IntegerField(required=True, write_only=True) def create(self, validated_data): """ Create company method """ owner_id = validated_data.pop('owner_id', None) company = Company.objects.create(**validated_data) company_member = CompanyMember.objects.create(user_id=owner_id, company_id=company.id, role='owner') return company И ViewSet: class CompaniesListViewSet(viewsets.ViewSet): def create(self, request): """ Creates a new company """ serializer = CompanySerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response({'company': serializer.data}, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) Как я понимаю, если `serializer.is_valid() проходит успешно, а в serializer.save() происходит ошибка, то запрос все равно будет успешным? Исходя из подходов Django и Django Rest Framework как правильно учесть данный нюанс? Сделать метод, отличный от save или всю логику вынести в какой-то другой объект, отвечающий за создание/обновление объектов, а serialiser использовать только для json-ответов? Заранее благодарю!
почему не ModelSerializer, для начала?

и почему сейв с ошибкой вылетит после is_valid??

amureki
06.08.2017
19:34:18
Исправьте текущий код, там может и ошибки пропадут :)

Vadim
06.08.2017
19:37:55
Текущий код работает (вроде ?) Сейчас заменил таким образом: class CompaniesListViewSet(viewsets.ViewSet): def create(self, request): """ Creates a new company """ serializer = CompanySerializer(data=request.data) if serializer.is_valid() and serializer.save(): return Response({'company': serializer.data}, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) При исключении в create serializer-а возвращаю False

amureki
06.08.2017
19:41:16
текущий код если и работает, то не оптимально, раз вы задаете вопросы) читаем http://www.django-rest-framework.org/api-guide/viewsets/#modelviewset

и http://www.django-rest-framework.org/api-guide/serializers/#modelserializer и не изобретаем велосипедов

darkwoolf
06.08.2017
20:24:04
Хаиль

слушайте

Google
darkwoolf
06.08.2017
20:24:21
на локальной машине if user.is_authenticated работает

А когда деплою код на pythonanywhere то нет

Трусов
06.08.2017
20:35:07
парни, есть вот такая моделька http://i.imgur.com/UopgYu8.png как загрузить Briefcases, но не грузить stuff с show_status = False Думал, что то типо такого case = Briefcases.objects.filter(id=pk, stuff__show_status=True) но нет

ну или хотя бы как их удалить из кверисета просто перебором? http://i.imgur.com/cI4OlZv.png

Трусов
06.08.2017
21:03:24
Именно

Ruslan
06.08.2017
21:19:24
https://github.com/mirumee/saleor ?
Развернул его сегодня, но так и не смог ему передать secret_key через export(как в их доках). Прописал его в сеттингс временно, но хотелось бы понять, почему ключ не передается куда положено?

Трусов
06.08.2017
21:29:29
Может дело в том что ты id передаёшь?
А что я должен передавать? у Briefcases есть таблица, со столбцом инкрементом, я выбираю тот Briefcases где есть совпадение id = pk

или я что то недогоняю?

Трусов
06.08.2017
21:31:55
primary key я имел ввиду

Dmitriy
06.08.2017
21:32:25
Короч объясни что ты хочешь сделать

Трусов
06.08.2017
21:34:01
у меня есть модель Briefcases и модель Stuff. У Briefcases есть ManyToManyField к Stuff. Мне нужно получить по id Briefcases и всего Stuff, которые ему принадежать, но при этом я должен получить только те Stuff ,у коготорых show_status = False

и все его Stuff*

Dmitriy
06.08.2017
21:40:11
stuffs = model.objects.get(id=id).stuff.filter(show_status=False)

Чот такое

Страница 424 из 1273