django - 如何访问外键取决于 django 中的当前活动用户
问题描述
模型.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="")
表格.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',
]
每个店铺都有一个相关的用户,在创建产品时,Product models 中的 created_by 字段需要填写
created_by = models.ForeignKey(Shop.filter(related_user = request.user)
从这个表单创建产品时如何分配这个值我正在使用基于类的视图
解决方案
如果您想更改表单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
在实例化表单时包含在视图中:
视图.py:
my_form = AddProductForm(user=request.user)
推荐阅读
- c# - GameObject' does not contain a definition for 'AddForce' || Unity3D
- html - zone-evergreen.js:2952 POST http://127.0.0.1:8000/api/users/ 404(未找到)
- java - 无法构建面向 JDK 11 的 Java 项目,目标版本 11 无效
- css - 我有一个附加动画的元素,所以我希望动画在我悬停在元素上后生效。我怎样才能做到这一点?
- mips - 为什么我的字符串长度子程序会给出一个无限循环?
- node.js - 有没有办法覆盖 NodeJS 中的传出连接?
- hadoop - Hue Filebrowser Search 仅在第一层搜索
- wordpress - 如何使用(ba)sh cURL 发布到具有基本身份验证的 Wordpress?
- node.js - firebase 函数在完成代码处理之前返回
- android - Error when inflating Bottom Navigation View even though the bottom_navigation.xml is right