如何在 Django UpdateView 中获取特定值?

How to get specific values in Django UpdateView?

提问人:Oriza 提问时间:10/28/2023 更新时间:10/28/2023 访问量:36

问:

我有一个通用的 UpdateView,领导者可以在其中管理连接到领导者公司的用户的设置。

我喜欢在选择字段中只包含该值,其中company_id等于 url 中的company_uuid。

现在,想要设置团队的领导者可以访问所有公司团队。

先谢谢你

models.py

class Company(models.Model):

    def __str__(self):
        return str(self.company_name)

    def generate_uuid():
        return uuid.uuid4().hex

    company_name = models.SlugField(max_length=100)    
    company_uuid = models.CharField(default=generate_uuid, editable=True, max_length=40)


class Team(models.Model):
    
    def __str__(self):
        return str(self.team)

    team = models.CharField(max_length=200, blank=True, null=True)
    company = models.ForeignKey(Company, null=True, blank=True, on_delete=models.CASCADE)


class Profile(models.Model):

    def __str__(self):
        return str(self.user)

    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    date = models.DateField(auto_now_add=True, auto_now=False, blank=True)
    company = models.ForeignKey('Company', on_delete=models.CASCADE, blank=True, null=True)
    team01 = models.ForeignKey('Team', on_delete=models.CASCADE, null=True, blank=True, related_name="eteam")

views.py

class UpdateProfileView(SuccessMessageMixin, UpdateView):
    model = Profile
    form_class = UpdateProfileForm
    template_name = 'users/management/update_profile.html'
    success_message = 'Változtatások mentve'

    def get_success_url(self):         
        return self.request.META.get('HTTP_REFERER')

urls.py

...
path('management/update_profile/<pk>/<uuid>', login_required(UpdateProfileView.as_view()), name='UpdateProfile'),
...

在表单中,我不使用任何小部件。

python django django-queryset django-generic-views

评论

0赞 KingRanTheMan 10/29/2023
嘿@Oriza,请让我知道下面的答案是否适合您

答:

1赞 KingRanTheMan 10/28/2023 #1

很高兴看到您的 forms.py,以确保这是正确的,但是如果它全部设置为标准,那么这应该有效:

要根据 URL 中的company_uuid筛选 team01 字段的选择,应覆盖 .在此方法中,将 team01 字段的查询集更改为仅包含与指定公司关联的团队。get_form()UpdateProfileView

见下文:

views.py

class UpdateProfileView(SuccessMessageMixin, UpdateView):
    model = Profile
    form_class = UpdateProfileForm
    template_name = 'users/management/update_profile.html'
    success_message = 'Változtatások mentve'

    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        company_uuid = self.kwargs.get('uuid')
        company = get_object_or_404(Company, company_uuid=company_uuid)
        form.fields['team01'].queryset = Team.objects.filter(company=company)
        return form

    def get_success_url(self):         
        return self.request.META.get('HTTP_REFERER')

希望这有帮助,如果没有,请告诉我(如前所述,很高兴看到表格也很好,但如果您通常这样做,上述修复应该没问题)