[英](Django) Limited ForeignKey choices by Current User in UpdateView
我最近能夠弄清楚如何在CreateView中執行此操作,但對於UpdateView卻不起作用(以下是有關如何在CreateView中執行此操作的原始文章: (Django)當前用戶的受限ForeignKey選擇 )
本質上,我需要它僅顯示當前登錄用戶創建的Universe,但是默認情況下,它顯示所有Universe。 當我嘗試設置form_class並模仿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_queryset()。
這是出現錯誤的代碼:
views.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
表格
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的確切擴展名)中需要以下內容:
class UpdateCharacter(LoginRequiredMixin, generic.UpdateView):
model = Character
template_name ='character_developer/character_create.html'
form_class = UpdateForm
def get_form_kwargs(self):
kwargs = super(UpdateCharacter,self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def form_valid(self,form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save
return super().form_valid(form)
我在上面做了警告-確保請求對象中的用戶實例是當前登錄用戶的用戶實例,並且具有足夠的權限來更新其自己的用戶-並且不能以某種方式代表他們發出請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.