Получение экземпляра пользователя из модели профиля
Всем привет, я создаю сайт электронной коммерции и застрял на определенном этапе, у меня есть две модели Продавец и Продукт, следующим образом:
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
не связан с вошедшим пользователем.