Найти свой путь через Скалаз [дубликат]

Чтобы сделать это с помощью общего представления, такого как CreateView ...

class AddPhotoToProject(CreateView):
    """
    a view where a user can associate a photo with a project
    """
    model = Connection
    form_class = CreateConnectionForm


    def get_context_data(self, **kwargs):
        context = super(AddPhotoToProject, self).get_context_data(**kwargs)
        context['photo'] = self.kwargs['pk']
        context['form'].fields['project'].queryset = Project.objects.for_user(self.request.user)
        return context
    def form_valid(self, form):
        pobj = Photo.objects.get(pk=self.kwargs['pk'])
        obj = form.save(commit=False)
        obj.photo = pobj
        obj.save()

        return_json = {'success': True}

        if self.request.is_ajax():

            final_response = json.dumps(return_json)
            return HttpResponse(final_response)

        else:

            messages.success(self.request, 'photo was added to project!')
            return HttpResponseRedirect(reverse('MyPhotos'))

, самая важная часть этого ...

    context['form'].fields['project'].queryset = Project.objects.for_user(self.request.user)

, read мой пост здесь

24
задан Community 23 May 2017 в 11:55
поделиться

4 ответа

Я бы порекомендовал отличную серию Изучение скалаза Юджина Йокоты на Скалазе 7. Автор следует структуре Учим тебя, Хаскель за великое благо . Подход системный и очень педагогический.

11
ответ дан paradigmatic 23 May 2017 в 11:55
поделиться

Хотя я никогда никого не отворачивал от учебных пособий по Haskell, они могут быть немного ошеломляющими, если вы разработчик в стиле ООП и не знаете, почему вы хотите жить в функциональном мире. .

Я выступил с докладом «скаляр для всех нас», который подходит к скалазу, хотя примеры, с которыми все знакомы: памятка (Памятка в скалазе), проверка домена (валидация в скалазе) и т. Д. Таким образом, «вариант использования» «Ясно и могу начать учиться решать знакомые проблемы, используя силу скалаза.

5
ответ дан Adam Rosien 23 May 2017 в 11:55
поделиться

Моим советом было бы не ждать, пока вы не почувствуете, что у вас есть общее представление о библиотеке - просто выберите несколько инструментов для начала, а затем переходите по концептуальным ссылкам по ходу работы.

Validation (который, кстати, на самом деле не является монадой ), вероятно, является единственным лучшим местом для начала. Если вы когда-либо использовали Either для проверки в стандартной библиотеке, Validation будет казаться вам знакомым и гораздо более удобным. Вы найдете много полезных обсуждений Validation и здесь в StackOverflow и в других местах .

Когда вы освоитесь с Validation, у вас должно быть хорошее общее представление о классе типов аппликативных функторов, который полезен во многих других контекстах.

Monoid является еще одной хорошей отправной точкой. Это очень простой класс типов (по сути, просто операция, подобная ассоциативному сложению, и элемент идентификации), и как только вы его поймете, вы увидите моноиды повсюду. См., Например, этот ответ (полное раскрытие: он от меня), показывающий, как использовать моноиды для решения проблемы, которая на первый взгляд может показаться не очень моноидальной.

В Scalaz есть множество других полезных маленьких инструментов, которые вы можете использовать, не разбирая всю картину в целом. Bifunctor - один из моих любимых - он делает работу с кортежами намного удобнее, давая вам возможность отобразить функцию по обеим сторонам:

scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> def inc(i: Int) = i + 1
inc: (i: Int)Int

scala> def repeat(n: Int)(s: String) = s * n
repeat: (n: Int)(s: String)String

scala> (inc(_)) <-: (1, "a") :-> repeat(3)
res0: (Int, String) = (2,aaa)

Как только вы хорошо разберетесь в нескольких эти концепции я бы предложил в Typeclassopedia Брента Йорджи, который ориентирован на Хаскель, но выполняет фантастическую работу, предоставляя вам достаточно теории категорий и абстрактной алгебры, чтобы понять большинство вещей, которые вы найдете в Scalaz.

9
ответ дан Community 23 May 2017 в 11:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: