如何访问外键取决于 django 中当前的活跃用户



models.py

class Shop(models.model):
shop_name = models.CharField(max_length=100, blank=True)
slug = AutoSlugField()
logo = models.ImageField(upload_to='restaurant_profile', blank=True)
related_user = models.ForeignKey(User, on_delete=models.CASCADE)
class Product(models.Model):
name = models.CharField(max_length=200)
price = models.FloatField()
slug = models.SlugField()
created by = models.ForeignKey(Shop, on_delete=models.DO_NOTHING, default="")

forms.py

class AddProductForm(forms.ModelForm):
name = forms.CharField(widget=TextInput(attrs={
'class': 'form-control input-md',
'style': 'width: 100%; display: inline;',
}), required=True)
price = forms.CharField(widget=TextInput(attrs={
'class': 'form-control input-md',
'style': 'width: 100%; display: inline;',
}), required=True)
category = forms.ModelChoiceField(queryset=ProductCategory.objects.all(), widget=Select(attrs={
'class': 'form-control input-md',
'style': 'width: 100%; display: inline;',
}), required=True)
class Meta:
model = Product
fields = [
'name',
'price',
'category',
'is_published',
'created_by',
]

每个商店都有一个相关的用户,当创建产品时,产品模型中created_by字段需要填写

created_by =  models.ForeignKey(Shop.filter(related_user = request.user)

如何在此窗体创建产品时分配此值 我正在使用基于类的视图

在视图中的有效形式中,您可以添加由用户创建的登录用户,显示的示例适用于基于类的视图

def form_valid(self, form):
form.instance.created_by = Shop.objects.get(related_user=self.request.user)
valid_data = super(ProductCreateView, self).form_valid(form)
return valid_data

如果要更改表单created_by的值(而不是在视图中,如注释中所述(,则应将request传递,甚至更好的是,将request.user传递给表单,并在保存之前添加它:

class AddProductForm(forms.ModelForm):
#...
fields = [
'name',
'price',
'category',
'is_published',
# 'created_by' Remove this
]
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super(UserProfileUpdateForm, self).__init__(*args,**kwargs)
def save(self, commit=True, *args, **kwargs):
instance = super().save(commit=False, *args, **kwargs)
instance.created_by = self.user
instance.save()
return instance

最后一步是在实例化表单时在视图中包含user

views.py

my_form = AddProductForm(user=request.user)

最新更新