将额外的参数传递给django模型表格以及request.post



我有一个评级模型,其中一些字段IP和URL和必需字段。我在请求中得到了其中一些字段。但是,我必须从我的视图中将IP和URL传递到Modelform。我的模型:

class Rating(models.Model):
    rating = core_fields.SmallIntegerRangeField(min_value=1, max_value=5)
    url = models.URLField(max_length=2048)
    tracker = models.ForeignKey("core.Tracker", db_index=True)
    ip = models.GenericIPAddressField(db_index=True)
    user_agent = models.CharField(max_length=100)
    object_id = models.PositiveIntegerField(db_index=True)
   _content_type = models.ForeignKey(ContentType, db_index=True)
   special_object = GenericForeignKey('_content_type', 'object_id')
class Meta:
    unique_together = ['_content_type', 'tracker', 'object_id']
    verbose_name = ('rating')

在我的Views.py中:

form = RatingModelForm(request.POST, ip=ip, url=url)
if form.is_valid():
    instance = form.save(commit=False)
    instance.save()

和我的forms.py:

class RatingModelForm(forms.ModelForm):
    class Meta:
        model = Rating
        exclude = ('special_object',)
    def __init__(self, *args, **kwargs):
        ip = kwargs.pop('ip', None)
        url = kwargs.pop('url', None)
        super(RatingModelForm, self).__init__(*args, **kwargs)
        self.fields['ip'].initial = ip
        self.fields['url'].initial = url

我尝试设置初始值,但是form.is_valid()给出false,并指出需要IP和URL。如何进行此操作?

模量的第一个参数是数据。即表格的预期数据。正如您提到的那样,request.POST是一个不可变的查询。通过从中制作一个副本,对其进行修改,然后将其传递到表单中,制作新的词典。

如果您在django querydict上使用dict()看起来很奇怪。因此,您必须制作查询副本的副本,以使其正常工作。

data = request.POST.copy()
data['ip'] = ip
data['url'] = url
form = RatingModelForm(data) 

最新更新