簡體   English   中英

(Django)當前用戶在UpdateView中的有限ForeignKey選擇

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM