Получение экземпляра пользователя из модели профиля

Всем привет, я создаю сайт электронной коммерции и застрял на определенном этапе, у меня есть две модели Продавец и Продукт, следующим образом:

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)

В конце я получаю ERROR: "Product.seller должен быть экземпляром Seller". Я понимаю требование, но не могу заставить себя представить код и придумать решение, ведь я передаю ему экземпляр User, а не экземпляр seller.

Поскольку это OneToOneField, вы можете получить связанную Seller модель User объекта с помощью user.seller, поэтому в данном случае:

instance.seller = request.user.seller

Это вызовет ошибку AttributeError, если ни один Seller не связан с вошедшим пользователем.

Вернуться на верх