Я пытаюсь получить идентификатор категории, но эта ошибка продолжает всплывать. Вот мои models.py
class Category(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='category_created')
name = models.CharField(max_length=500, db_index=True)
slug = models.CharField(max_length=500, blank=True)
images = models.ImageField(upload_to='users/%Y/%m/%d', blank=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
class Product(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='product')
category = models.ForeignKey(Category, related_name='products')
name = models.CharField(max_length=500, db_index=True)
slug = models.CharField(max_length=500, blank=True)
images = models.ImageField(upload_to='users/%Y/%m/%d', blank=True)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
stock = models.PositiveIntegerField(blank=True)
available = models.CharField(max_length=25)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super(Product, self).save(*args, **kwargs)
Это мои взгляды, из-за которых происходят ошибки, и не знаю, как исправить представления, и я уверен, что проблема связана с моими представлениями.py
@login_required
def product(request):
if request.method == 'POST':
category = Category.objects.get(pk = category_id)
product_form = ProductForm(data=request.POST, files=request.FILES)
if product_form.is_valid():
new_item = product_form.save(commit=False)
new_item.category = category
new_item.save()
messages.success(request, 'Product created')
else:
messages.error(request, 'Product Failed to be created')
else:
product_form = ProductForm()
return render(request, 'shop/product/product_create.html', {'product_form':product_form})
category = Category.objects.get(pk = category_id)
Чтобы получить объект Category
идентифицированный category_id
, необходимо определить category_id
. Функция просмотра (product()
) не определяет эту переменную.
Насколько я понимаю, вы пытаетесь создать Product
используя данные формы. Если в форме есть поле для отношения между Product
и Category
, вам не нужно вручную устанавливать product.category
.
Если у ProductForm
нет ProductForm
на отношения, вы должны получить category_id
либо из формы в объекте request
(если у вас есть это поле в форме HTML), например:
category_id = request.POST.get('category_id')
или передачи идентификатора категории в качестве параметра URL (doc)
Привет, Экхорутомен Харсли,
Если вы пытаетесь создать новый объект, вам не нужен этот идентификатор, потому что Django автоматически добавляет его.
вам просто нужно создать новый объект категории с помощью чего-то подобного
@login_required
def product(request):
if request.method == 'POST':
category = Category()
product_form = ProductForm(data=request.POST, files=request.FILES)
if product_form.is_valid():
new_item = product_form.save(commit=False)
new_item.category = category
new_item.save()
messages.success(request, 'Product created')
else:
messages.error(request, 'Product Failed to be created')
else:
product_form = ProductForm()
return render(request, 'shop/product/product_create.html', {'product_form':product_form})
Если вы хотите получить доступ к категории, которая уже существует в вашей базе данных. Вы можете получить к нему доступ таким образом:
category_id = 3 // the id you want to access
category = Category.objects.get(id=category_id)
Надеюсь, это поможет вам
вам следует использовать статический идентификатор или вам нужно использовать идентификатор из метода post
@login_required
def product(request):
if request.method == 'POST':
#category_id = 1
#you should have to use a static id
#category_id = request.POST['category_id']
#you should have to use a id from post method
category = Category.objects.get(pk = category_id)
product_form = ProductForm(data=request.POST, files=request.FILES)
if product_form.is_valid():
new_item = product_form.save(commit=False)
new_item.category = category
new_item.save()
messages.success(request, 'Product created')
else:
messages.error(request, 'Product Failed to be created')
else:
product_form = ProductForm()
return render(request, 'shop/product/product_create.html', {'product_form':product_form})
category_id
в своем представлении, но эта переменная нигде не была определена, следовательно, ошибка.