首页 > 解决方案 > 从配置文件模型中获取用户实例

问题描述

大家好,好吧我正在建立一个电子商务网站并卡在某个点上,我有两个模型卖家和产品,如下:

class Seller(models.Model):
    seller = models.OneToOneField(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=30)
    country = models.CharField(max_length=30)
    phone_number = PhoneNumberField()
    email = models.EmailField(max_length=300)

    def __str__(self):
        return self.seller.username

class Product(models.Model):
    STATUS_CHOICES = [
        ('New', 'New'),
        ('New', 'Used'),
    ]
    image = models.ImageField(default='dev1.jpg', upload_to='images/')
    condition = models.CharField(choices=STATUS_CHOICES, max_length=10)
    seller = models.ForeignKey(Seller, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField()
    price = models.CharField(max_length=15)
    location = models.CharField(max_length=30)
    posted_on = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

现在我有一个表格可以将新产品保存为:

class SellProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('image', 'condition', 'title', 'description', 'price', 'location', )

问题出在views.py中:

@login_required
def sell(request):
    form = SellProductForm()
    if request.method == 'POST':
        form = SellProductForm(request.POST)
        if form.is_valid():
            print('Ok')
            instance = form.save(commit=False)
            instance.seller = request.user
            instance.save()
            return redirect('index')
    context = {
        'form': form,
    }
    return render(request, 'myapp/sell.html', context)

最后,我得到错误:“Product.seller must be a Seller instance。” 我理解需求,但我无法让自己想象代码并提出解决方案,因为我给它的是用户实例而不是卖家实例。

标签: pythondjangodjango-modelsdjango-views

解决方案


既然是 a ,就可以用 获取对象OneToOneField的相关Seller模型,所以在这种情况下:Useruser.seller

instance.seller = request.user.seller

这将引发一个AttributeErrorif noSeller链接到登录用户。


推荐阅读