поля в классе Meta стали недействительными - PullRequest
0 голосов
/ 03 февраля 2020

models.py

class Product(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    price = models.DecimalField(decimal_places=5,max_digits= 1500)
    summary = models.TextField()
    featured = models.BooleanField()
    def __str__(self):
        return self.title
        # return f'product title:{self.title}-product price:{self.price}'workok
    class Meta:
         ordering = ('-price',)


class Opinion(models.Model):
        name = models.CharField(max_length=20)
        email = models.EmailField(max_length=20)
        body = models.TextField()
        opinion_date = models.DateTimeField(auto_now_add=True)
        active = models.BooleanField(default=False)
        product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='opinion_set')

        def __str__(self):
            return f'({self.name}) add opinion about ({self.product})'

forms.py:

from django.forms import ModelForm
from .models import Product  #space after from keyword

class OpinionModelForm(ModelForm):
    class Meta:
        model = Product
        fields = ['name','email','body','product']



invalid in code line :
 fields = ['name','email','body','product']      #---- NOT WORK !!!

, но если я изменю код выше на:

fields = "__all__"           # ----it is WORKing ok without any problem !!

вопрос: что такое Ошибка? Мне не нужны все поля в модели Product (например, активное логическое поле), мне нужны только поля 'name', 'email', 'body', 'product'.

1 Ответ

0 голосов
/ 03 февраля 2020

В соответствии с ошибкой и предоставленным вами кодом основная проблема заключается в том, что вы допустили ошибку при выборе модели в сериализаторе:

class OpinionModelForm(ModelForm):
    class Meta:
        model = Product
        fields = ['name','email','body','product']

Имя сериализатора равно OpinionModelForm, а перечисленные поля принадлежат Opinion так что, я думаю, вы действительно хотели сериализовать Opinion, а не Product, как вы определили в этой строке:

model = Product

Просто измените его на:

model = Opinion
...