我有两个相关的模型,Company
和{default_package
。以下是模型:
class Company(models.Model):
default_package = models.OneToOneField(
Package,
blank=True,
null=True,
related_name='default_for_%(class)s')
对于Package
我试图为公司制作一个通用的CreateView
和{
class EditViewsMixin(DashboardAccessMixin, SuccessMessageMixin):
model = Company
success_url = reverse_lazy('dashboard:companies')
form_class = CompanyForm
class CompanyCreate(EditViewsMixin, CreateView):
template_name = 'companies/new.html'
success_message = "Company '%(name)s' was created successfully"
class CompanyUpdate(EditViewsMixin, UpdateView):
template_name = 'companies/edit.html'
success_message = "Company '%(name)s' was updated successfully"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['packages'] = self.object.package_set.order_by('name')
return context
CompanyForm
类似于以下内容:
class CompanyForm(forms.ModelForm):
class Meta:
model = Company
fields = [
'name',
'default_package',
]
问题是,在这个表单中,default_package
下拉菜单显示所有的包,而我希望它显示在考虑中的公司的package_set
中的包,类似于通过引用视图的get_context_data
方法中的self.object
。在
本质上,我想在CompanyForm
中做这样的事情:
default_package = forms.ModelChoiceField(
queryset=Package.objects.filter(company=self.instance)
)
但是,这是不可能的,因为self
没有在这个级别定义。对于一个特定的字段,有没有一种类似于ModelForm
的方法,在这种方法中,我可以使用self.instance
来定义查询集?在
我通过如下更新
ModelForm's
__init__()
中的字段来做到这一点:相关问题 更多 >
编程相关推荐