Python 如何使用Django CreateView实现依赖下拉列表?

Python 如何使用Django CreateView实现依赖下拉列表?,python,django,Python,Django,我正在尝试为我的一个模型“服务”创建CreateView。我的“服务”模型具有“资产”模型的外键。“资产”模型具有当前用户的外键 我想用当前登录的“用户”拥有的所有“资产”填充“服务”CreateView中的下拉列表 服务模式 class Service(models.Model): name = models.CharField(max_length=100) category = models.CharField(max_length=100) provider =

我正在尝试为我的一个模型“服务”创建CreateView。我的“服务”模型具有“资产”模型的外键。“资产”模型具有当前用户的外键

我想用当前登录的“用户”拥有的所有“资产”填充“服务”CreateView中的下拉列表

服务模式

class Service(models.Model):
    name = models.CharField(max_length=100)
    category = models.CharField(max_length=100)
    provider = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    asset = models.ForeignKey(Asset, on_delete=models.CASCADE)
资产模型

class Asset(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)
    suburb = models.CharField(max_length=100)
    postcode = models.CharField(max_length=4)
    state = models.CharField(max_length=3)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
views.py中的ServiceCreateView

class ServiceCreateView(LoginRequiredMixin, CreateView):
    model = Service
    fields = ['name', 'category', 'provider', 'asset']
如果在字段中输入用户“asset”,则会将所有资产添加到下拉列表中。我需要它只是当前用户拥有的资产

非常感谢在这方面的任何帮助

多谢各位


(我正在使用Django 2.2)

修改您的
ServiceCreateView
以使用不同的表单,指定模板并将当前用户发送到该表单,以便它知道需要为哪个用户筛选
资产

views.py:

class ServiceCreateView(LoginRequiredMixin,CreateView):
form_class=ServiceCreateForm
template_name='service_form.html'
def get_form_kwargs(自我):
kwargs=super()
kwargs['user']=self.request.user
返回kwargs
使用相同的字段和模型创建
ModelForm
,它将在init上获取
user
实例,并相应地过滤
资产
字段

forms.py:

类ServiceCreateForm(forms.ModelForm):
类元:
型号=服务
字段=['name'、'category'、'provider'、'asset']
定义初始化(self,*args,**kwargs):
user=kwargs.pop('user',无)
super()
self.fields['asset'].queryset=self.fields['asset'].queryset.filter(
所有者=用户)

非常好用,谢谢。