gpt4 book ai didi

Django模型表单过滤器查询集

转载 作者:行者123 更新时间:2023-12-02 06:19:04 24 4
gpt4 key购买 nike

我有以下模型:

class Article(models.Model):

title = models.CharField()
description = models.TextField()
author = models.ForeignKey(User)


class Rating(models.Model):

value = models.IntegerField(choices=RATING_CHOICES)
additional_note = models.TextField(null=True, blank=True)
from_user = models.ForeignKey(User, related_name='from_user')
to_user = models.ForeignKey(User, related_name='to_user')
rated_article = models.ForeignKey(Article, null=True, blank=True)
dtobject = models.DateTimeField(auto_now_add=True)

基于上述模型,我创建了一个模型表单,如下:

模型表格:

class RatingForm(ModelForm):

class Meta:
model = Rating
exclude = ('from_user', 'dtobject')

排除 from_user,因为 request.userfrom_user

表单呈现良好,但在下拉字段的 to_user 中,作者也可以对自己进行评分。所以我希望当前用户的名称填充在下拉字段中。我该怎么做?

最佳答案

覆盖__init__to_user 中删除当前用户选择。

更新:更多说明

ForeignKey 使用 ModelChoiceField其选择是查询集。所以在 __init__您必须从 to_user 中删除当前用户的查询集。

更新 2:示例

class RatingForm(ModelForm):
def __init__(self, current_user, *args, **kwargs):
super(RatingForm, self).__init__(*args, **kwargs)
self.fields['to_user'].queryset = self.fields['to_user'].queryset.exclude(id=current_user.id)

class Meta:
model = Rating
exclude = ('from_user', 'dtobject')

现在在您创建 RatingForm 的 View 中对象传递request.user作为关键字参数 current_user像这样。

form = RatingForm(current_user=request.user)

关于Django模型表单过滤器查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13539358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com