我的 models.py
中有这些课程serviceUrl
因为我想要"孩子"字段"地址"模型只显示" child"与" parent"相关的对象我将此代码写入 forms.py
class Parent(models.Model):
title = models.CharField()
class Child(models.Model):
title = models.CharField()
parent = models.ForeignKey(Parent)
class Address(models.Model)
title = models.CharField()
parent = models.ForeignKey(Parent)
child = models.ManyToManyField(Child)
views.py
class AddressForm(forms.ModelForm):
class Meta:
model = Address
fields = ('title', 'parent', 'child')
def __init__(self, parent_id, *args, **kwargs):
super(AddressForm, self).__init__(*args, **kwargs)
self.fields['child'].queryset = Child.objects.filter(parent__id=parent_id)
结果:子字段仅显示与父请求相关的子对象。这就是我想要的。
问题:当我提交时,我收到此错误:
AttributeError at / manage / add_address /' str'对象没有属性 '获得'
回溯:
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/exception.py" 在内心 39. response = get_response(request)
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/base.py" 在_get_response中 187. response = self.process_exception_by_middleware(e,request)
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/handlers/base.py" 在_get_response中 185. response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件" / Users / Developer / Desktop / Projects / ****** / *** / views.py"在 add_address 167.如果是form.is_valid():
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/forms/forms.py" 在is_valid 169.返回self.is_bound而不是self.errors
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/forms/forms.py" 在错误 161. self.full_clean()
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/forms/forms.py" 在full_clean 370. self._clean_fields()
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/forms/forms.py" 在_clean_fields 382. value = field.widget.value_from_datadict(self.data,self.files, self.add_prefix(名))
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/forms/widgets.py" 在value_from_datadict中 427. upload = super(ClearableFileInput,self).value_from_datadict(data,files,name)
文件 " /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/forms/widgets.py" 在value_from_datadict中 354. return files.get(name)
异常类型:/ manage / add_address / Exception中的AttributeError 价值:' str'对象没有属性' get'
请帮忙吗?
答案 0 :(得分:1)
您已将parent_id
作为表单的第一个位置参数,因此您应该在POST块中传递它:
form = AddressForm(parent_id, request.POST)
请注意,最好不要更改表单的签名,而是使用kwargs:
def __init__(self, *args, **kwargs):
parent_id = kwargs.pop('parent_id', None)
super(AddressForm, self).__init__(*args, **kwargs)
并且做:
form = AddressForm(request.POST, parent_id=parent_id)
POST块中的和
form = AddressForm(parent_id=parent_id)
在其他地方。