Django удалить запись из полей выбора - PullRequest
0 голосов
/ 19 мая 2019

У меня в статусе модели с Dropdown: models.py

class Item(models.Model):
    DRAFT = "D"
    PUBLISHED = "P"
    CLOSED = "C"
    STATUS = (
        (DRAFT, _("Draft")),
        (PUBLISHED, _("Published")),
        (CLOSED, _("Closed")),
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, null=True, related_name="articleauthor",
        on_delete=models.SET_NULL)
   ...
    status = models.CharField(max_length=1, choices=STATUS, default=DRAFT)
   ...

forms.py

class ItemForm(forms.ModelForm):
    #status = forms.CharField(widget=forms.HiddenInput())
    edited = forms.BooleanField(widget=forms.HiddenInput(), required=False, initial=False)
    content = MarkdownxFormField()
    class Meta:
        model = Item
        fields = ["title", "content", "image", "price", "currency", "status", "edited"]

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

views.py

class CreateItemView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
    """Basic CreateView implementation to create new articles."""
    permission_required = 'is_staff'
    model = Item
    message = _("Your article has been created.")
    form_class = ItemForm
    template_name = 'item_create.html'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

    def get_success_url(self):
        messages.success(self.request, self.message)
        return reverse('offers:list')
    '''
    def get_queryset(self):
        form = self.form = self.form_class(self.request.GET)
        if self.request.user.is_authenticated():
            form.fields['status'].choices.pop("C")
            form.fields['status'].widget.choices.pop("C")
    '''

как бы вы специально скрывали "закрытое" для одного представления?

1 Ответ

1 голос
/ 19 мая 2019

Укажите доступные варианты

STATUS_OPTIONS_NO_CLOSED = (
        (DRAFT, _("Draft")),
        (PUBLISHED, _("Published")),
    )

и добавьте их в форму

status = forms.CharField(widget=forms.Select(choices=STATUS_OPTIONS_NO_CLOSED))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...