首页 > 解决方案 > 设置 MyForm(data=data) (Django) 时“user_id”为空

问题描述

我有以下型号

#models.py

class MyModel(models.Model):

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete = models.CASCADE,null=True)
    link = models.URLField(max_length=2048)
    date_added = models.DateTimeField(default = timezone.now)
    used = models.BooleanField(default = True)

和我的表格

class MyModelForm(forms.ModelForm):
    class Meta:
        model = Wishlist
        exclude = [
            "user","date_added"
        ]

当我在我看来尝试“手动”创建一个实例(在 for 循环中)并保存它时,我的数据库中的“user_id”为 NULL

#views.py

def AddLink(request):
    user = request.user
    instance = MyModel(user=user)
    if request.method == "POST":
        form = MyModelForm(request.POST,instance = instance)    
        if form.is_valid():
            link = form.instance.wishlist 
            used = form.instance.discount_pct
            
            #some util function to do some stuff
            res = my_util_func(link,api_key)
            for used, link in zip(res[0],res[1]):
                data = {"link":link,"used":used}
                form = MyModelForm(data=data)
                form.save()

            context = {
                "results":res} 
            return render(request, "discounttracker/myhtml.html",context=context)

我已尝试更改datadata = {"link":link,"used":used,"user":user}data = {"link":link,"used":used,"user_id":user}但它仍然是空的。

如何在此处添加用户?

标签: djangodjango-forms

解决方案


ModelForm.save()在调用中有一个秘密选项,commit它允许您现在不保存表单,而是返回一个模型并在其中插入一些数据。这应该在这里完美地工作

form = MyModelForm(data=data))
instance = form.save(commit=False)
instance.user = request.user
instance.save()

此示例将当前登录的用户插入user模型的字段中。


推荐阅读