имя 'category_id' не определено

-2

Я пытаюсь получить идентификатор категории, но эта ошибка продолжает всплывать. Вот мои 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})
  • 0
    Ну, действительно, это не определено. Откуда это должно исходить?
  • 0
    Вы пытаетесь использовать переменную category_id в своем представлении, но эта переменная нигде не была определена, следовательно, ошибка.
Показать ещё 3 комментария
Теги:
django-models

3 ответа

0
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)

0

Привет, Экхорутомен Харсли,

Если вы пытаетесь создать новый объект, вам не нужен этот идентификатор, потому что 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)

Надеюсь, это поможет вам

0

вам следует использовать статический идентификатор или вам нужно использовать идентификатор из метода 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})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню