Python 具有自定义模型初始化的Django modelformset
我在django有以下型号:Python 具有自定义模型初始化的Django modelformset,python,django,django-forms,modelform,formset,Python,Django,Django Forms,Modelform,Formset,我在django有以下型号: class tag(models.Model): ... user = models.ForeignKey(user) shop = models.ForeignKey(shop) name = models.CharField() ... class user(models.Model): ... name = models.CharField() ... class shop(models.Mo
class tag(models.Model):
...
user = models.ForeignKey(user)
shop = models.ForeignKey(shop)
name = models.CharField()
...
class user(models.Model):
...
name = models.CharField()
...
class shop(models.Model):
...
user = models.ForeignKey(user)
name = models.CharField()
...
现在我需要创建一个标签模型的modelformset,它允许我为每个用户存储一堆不同的标签。我要寻找的是一种使用为给定用户筛选出的shop字段初始化此类表单集的方法
这样,我的表单将有一个分配给用户的商店选择
欢迎任何意见!
谢谢您可以使用为相关模型创建表单集。要为您的标签
和用户
模型创建表单集,您可以执行以下操作:
tag_formset = inlineformset_factory(user, tag, fields=['shop', 'name'])
formset = tag_formset(instance=request.user)
要过滤shop
字段的查询集,您可以动态创建表单或将formfield\u callback
传递给工厂函数
如果使用formfield\u回调
,此回调可用于返回表单的自定义字段
def cb(field, **kwargs):
if field.name == 'shop':
kwargs['queryset'] = shop.objects.filter(user=request.user)
return field.formfield(**kwargs)
tag_formset = inlineformset_factory(user, tag, fields=['shop', 'name'], formfield_callback=cb)
formset = tag_formset(instance=request.user)
也可以在视图中动态定义表单类
class TagForm(forms.ModelForm):
shop = forms.ModelChoiceField(shop.objects.filter(user=request.user))
class Meta:
fields = ['shop', 'name']
tag_formset = forms.inlineformset_factory(user, tag, form=TagForm)
formset = tag_formset(instance=request.user)
你能说得更具体些吗?您是否想要一个表单集,当给定一个用户时,每个表单都是一个名称和店铺输入,其中店铺输入被过滤?也许你的模特会有帮助,你是对的。这对我来说有点难以解释,所以我编辑了我的帖子。ThxBrilliant!我还是django formset的新手,不知道inlineformset_工厂。你的回答肯定有帮助。干杯