Делать поля modelformset специфичными для пользователя? - PullRequest
0 голосов
/ 22 апреля 2019

Я использую Django в качестве основы для системы инвентаризации.Инвентарный список представлен моделью с полем для названия продукта и 3 полями для суммы заказа для каждого отдельного местоположения.Я хотел бы, чтобы пользователь вошел в форму и увидел только поле «Продукт» и поле суммы заказа, относящееся к ним.ИДК, если это возможно сделать таким образом, я открыт для других способов решения этой проблемы.

До сих пор я пытался использовать init в своей форме, но безрезультатно.Я знаю, что это не правильно, но, надеюсь, это поможет вам понять, чего я пытаюсь достичь.

models.py

class Sysco_Products(models.Model):
    Products = models.CharField(max_length = 200)
    order_amount = models.IntegerField(blank=True, null=True,)
    shop1_order_amount = models.IntegerField(blank=True, null=True,)
    shop2_order_amount = models.IntegerField(blank=True, null=True,)
    shop3_order_amount = models.IntegerField(blank=True, null=True,)

    def __str__(self):
        return self.Products

    class meta:
        managed = True
        db_table = 'sysco_products'

form.py


class orderform(forms.ModelForm):

    def __init__(self, *args, user, **kwargs):
        self.user = user
        super().__init__( *args, **kwargs )

        if AuthUser.objects.filter(username=self.user).is_PSJManager1 == True:
            self.fields.pop('shop1_order_amount')

        elif AuthUser.objects.filter(username=self.user).is_CocoaManager1 == True: 
            self.fields.pop('shop2_order_amount')

        else:
            self.fields.pop('shop3_order_amount')

    class Meta:
        model = Sysco_Products
        fields = ('order_amount', 'shop1_order_amount',)

views.py

class SyscoOrder(TemplateView):
        template_name= "SyscoOrder.html"

        def get_form_kwargs(self):
                kwargs = super().get_form_kwargs()
                kwargs.update({ 'user' : self.request.user })
                return kwargs

        def get(self, request):
                OrderFormSet = modelformset_factory(Sysco_Products, fields=('order_amount', 'shop1_order_amount', 'shop2_order_amount', 'shop3_order_amount'))
                context = {

                        'OrderFormSet' : OrderFormSet,
                }
                return render(request, self.template_name, context)

        def post(self, request):
                OrderFormSet = modelformset_factory(Sysco_Products, fields=('order_amount',))
                formset = OrderFormSet(request.POST,)
                if formset.is_valid():
                        formset.save()
                        return redirect('Order')

                context ={

                        'formset' : formset,
                }
                return render(request, self.template_name, context)

Я очень новичок, я быценим небольшое руководство относительно того, является ли это лучшим способом решения этой проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...