Django CreateView Object не может быть создан, потому что данные не проверены - PullRequest
0 голосов
/ 19 марта 2020

Добрый день.

Я пытаюсь создать объект, основанный на вводе формы, я выяснил данные, все предоставлено, но по какой-то причине форма не проверена.

Я также пытался переопределить form_valid(self,form), но проблема с этим методом заключалась в том, что django никогда не обращался к нему, как если бы он не существовал.

forms.py

class CreatePostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = '__all__'

views.py

class CreatePost(CreateView):
    form_class = CreatePostForm
    template_name = 'dashboard/add-product.html'

    # success_url = redirect('user_posts:post_detail')

    def post(self, request, *args, **kwargs):
        form = CreatePostForm(request.POST)
        if self.form_valid(form):
            post = form.save(commit=False)
            post.user = request.user
            post.save()
            return redirect('user_posts:post_detail', args=post.slug)
        print('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')

код в шаблоне имеет базовую c форму, а не может импортировать его.

данные, которые были передано через request.POST

user    

'b8a3b0b3-0eef-48ed-b257-a6f9bfdd5cda'

title   

'theetitle'

main_description    

'agdgdfg'

slug    

''

main_image  

'Bucee_Lee_smile.jpg'

subtitle1   

''

sub_description1    

''

sub_image1  

''

subtitle2   

''

sub_description2    

''

sub_image2  

''

subtitle3   

''

sub_description3    

''

sub_image3  

''

total_likes     

''

точек трассировки на эту линию

    if self.form_valid(form):

модель

class Post(models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200, unique=True)
    main_description = models.TextField()
    slug = models.SlugField(db_index=True, blank=True)
    main_image = models.ImageField(upload_to=upload_image)
    subtitle1 = models.CharField(max_length=200, blank=True, null=True)
    sub_description1 = models.TextField(blank=True, null=True)
    sub_image1 = models.ImageField(upload_to=upload_image,
                                   blank=True, null=True)
    subtitle2 = models.CharField(max_length=200, blank=True, null=True)
    sub_description2 = models.TextField(blank=True, null=True)
    sub_image2 = models.ImageField(upload_to=upload_image,
                                   blank=True, null=True)
    subtitle3 = models.CharField(max_length=200, blank=True, null=True)
    sub_description3 = models.TextField(blank=True, null=True)
    sub_image3 = models.ImageField(upload_to=upload_image,
                                   blank=True, null=True)
    posts_liked = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                         related_name='posts_liked',
                                         blank=True, null=True)

    total_likes = models.PositiveIntegerField(blank=True, null=True, db_index=True)

    created_at = models.DateTimeField(auto_now_add=True, db_index=True)

    objects = PostManager()

    # TODO: get_absolute_url()

    def get_absolute_url(self):
        return reverse('user_posts:post_detail', args=[self.slug])

    def __str__(self):
        return self.title

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        if not self.slug:
            self.slug = slugify(self.title)
            super(Post, self).save(force_insert, force_update, using, update_fields)

    class Meta:
        verbose_name_plural = 'Posts'

1 Ответ

2 голосов
/ 19 марта 2020

попробуйте следующий способ

class CreatePost(CreateView):
    form_class = CreatePostForm
    template_name = 'dashboard/add-product.html'
    success_url = ('url_name')

    def form_valid(self, form):
        valid_data = super(CreatePost, self).form_valid(form)
        form.instance.user = self.request.user
        return valid_data
...