【问题标题】:Drag and Drop sorting with django and ajax使用 django 和 ajax 进行拖放排序
【发布时间】:2022-07-01 09:01:59
【问题描述】:

我想向玩家字段添加拖放功能。我想知道这种场景的条件和要求是什么。我应该遵循哪些步骤?目前,玩家在我们选择它们时被存储(所以首先选择的先行)。我也想在拖放后保存订单,任何建议或问题改进将是一个很好的支持。

模型.py

class Group(TimeStampModel, PermissionsMixin):
name = models.CharField(_("Group name"), blank=False, max_length=127, unique=False)
phase = models.ForeignKey("Phase", related_name="groups", on_delete=models.CASCADE, blank=False, null=True)

class Meta:
    ordering = ["name"]

Forms.py:我现在使用的是 modelMultipleChoiceField。

class GroupCreateForm(ModelForm):
    players = ModelMultipleChoiceField(queryset=None, help_text=_("Please hold down 'Control', to select more than one player"))
    
        def save(self, commit=True):
            group = super(GroupCreateForm, self).save(False)
        group.phase = self.instance.phase
        group.created_by = get_request().user
        if commit:
            group.save()
        if self.instance:
            for player_id in self.cleaned_data['players']:
                player = Player.objects.get(pk=player_id)
                ranking = GroupRanking(order=0, player=player, group=group)
                ranking.save()

        # Trigger a compute on saving
        group.phase.ruleset.computeScores()

        return group

    class Meta:
        model = Group
        fields = ("name",)

views.py

class GroupCreateView(AccessControlMixin, CreateView):
model = Group
form_class = GroupCreateForm
template_name_suffix = '_create'

def has_access(self, user):
    return self.can("   ", self.phase.tournament)

def get_success_url(self):
    return "%s" % reverse("tournaments:detail",
                          kwargs={"pk": self.kwargs['pk']})

def dispatch(self, request, *args, **kwargs):
    self.phase = get_object_or_404(Phase, pk=kwargs['rpk'])
    return super(GroupCreateView, self).dispatch(request, *args, **kwargs)

def get_context_data(self, **kwargs):
    context = super(GroupCreateView, self).get_context_data(**kwargs)
    self.phase = get_object_or_404(Phase, pk=self.kwargs['rpk'])
    self.tournament = get_object_or_404(Tournament, pk=self.kwargs['pk'])
    context['phase'] = self.phase
    context['group_size'] = self.phase.group_size
    context['tournament'] = self.tournament
    return context

def form_valid(self, form):
    form.instance.phase = self.phase
    return super(GroupCreateView, self).form_valid(form)

def get_form(self, *args, **kwargs):
    form = super(GroupCreateView, self).get_form(*args, **kwargs)
    if get_request().user.name_format == 'First name Last name':
        form.fields['players'].queryset = self.phase.not_in_group_players.order_by("first_name", "last_name")
    else:
        form.fields['players'].queryset = self.phase.not_in_group_players.order_by("last_name", "first_name")
    return form


group_create_view = GroupCreateView.as_view()

form.py :这是我获取 form.palyers 的方式。

{{ form.name }} and {{ form.players }}

这是工作电流输出: output

【问题讨论】:

    标签: django ajax


    【解决方案1】:

    请看这个post它会帮助你。

    注意:我更新了你可以从here下载的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 2012-12-02
      相关资源
      最近更新 更多