我最近在CreateView中找到了如何做到这一点,但UpdateView却没有找到同样的方法(以下是关于如何在CreateView中做到这一点的原始文章:(Django) Limited ForeignKey choices by Current User)
本质上,我需要它只显示当前登录用户创建的universe,但默认情况下,它显示所有universe。 当我试图设置一个form\u类并让它模仿CreatView的解决方案时,它会抛出一个配置不正确的错误
models.py
:
class Universe(models.Model):
user = models.ForeignKey(User,related_name='universe',on_delete=models.CASCADE)
name = models.CharField(max_length=100, unique=True)
description = models.TextField(max_length=2000,blank=True,default="")
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('universe:singleuniverse',kwargs={'pk': self.pk})
class Meta:
ordering = ['name']
unique_together = ['user','name']
class Character(models.Model):
user = models.ForeignKey(User,related_name='characters',on_delete=models.CASCADE)
universe = models.ForeignKey("story_universe.Universe", on_delete=models.CASCADE)
name = models.CharField(max_length=255,unique=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('character_developer:singlecharacter',kwargs={'pk': self.pk})
class Meta():
ordering = ['name']
unique_together=['user','name']
views.py
:
class UpdateCharacter(LoginRequiredMixin,generic.UpdateView):
model = Character
fields = ('universe','name')
template_name = 'character_developer/character_update_form.html'
更新 错误是:
错误:在/characters/update/3处配置不正确/ UpdateCharacter缺少QuerySet。定义UpdateCharacter.model、UpdateCharacter.queryset或重写UpdateCharacter.get\u queryset()
下面是得到错误的代码:
视图.py:
class UpdateCharacter(LoginRequiredMixin,generic.UpdateView):
template_name = 'character_developer/character_update_form.html'
form_class = UpdateForm
def get_form_kwargs(self):
kwargs = super(UpdateCharacter,self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
表单.py
class UpdateForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
user = kwargs.pop('user')
super(UpdateForm,self).__init__(*args,**kwargs)
self.fields['universe'].queryset = Universe.objects.filter(user=user)
class Meta:
model = Character
fields = ('universe','name')
我相信在
views.py
(几乎是CreateCharacter的精确扩展)中需要以下内容:我要警告上面提到的-确保请求对象中的用户实例是当前登录用户的实例,并且有足够的权限更新他们自己的用户-并且不能以某种方式代表他们发出请求
相关问题 更多 >
编程相关推荐