我正在使用django作为库存系统的框架。库存清单由一个模型表示,每个产品分别具有一个产品名称字段和3个订单金额字段。我想做的是让用户登录到表单,然后仅看到“产品”字段和特定于他们的“订单金额”字段。如果这可以做到这一点,Idk愿意接受其他解决此问题的方法。
到目前为止,我已经尝试过在表单中使用 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)
我是新手,希望能获得一些指导,以了解这是否是解决此问题的最佳方法