Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django中使用CreateView传递数据_Python_Django - Fatal编程技术网

Python 在django中使用CreateView传递数据

Python 在django中使用CreateView传递数据,python,django,Python,Django,我得到一个错误: 非空约束失败:films\u comment.film\u id 在评论页面上有一个名为body的表单字段用于评论本身,我还需要它来存储针对用户和电影的评论 型号: from django.db import models from django.urls import reverse class Film(models.Model): title = models.CharField(max_length=200) director = models.Cha

我得到一个错误:

非空约束失败:films\u comment.film\u id

在评论页面上有一个名为body的表单字段用于评论本身,我还需要它来存储针对用户和电影的评论

型号:

from django.db import models
from django.urls import reverse

class Film(models.Model):
    title = models.CharField(max_length=200)
    director = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    pub_date = models.DateField('date published')

    def get_absolute_url(self):
        return reverse('films:detail', kwargs={'pk' : self.pk})

class Comment(models.Model):
# user = models.ForeignKey(User, on_delete=models.CASCADE)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    film = models.ForeignKey(Film, on_delete=models.CASCADE)
    body = models.CharField(max_length=200)
观点:

from django.views import generic
from .models import Film, Comment
from django.views.generic.edit import CreateView, UpdateView, DeleteView

class IndexView(generic.ListView):
    # model = Film
    template_name = 'films/index.html'
    # context_object_name = 'object_list'

    def get_queryset(self):
        return Film.objects.all()

class DetailView(generic.DetailView):
    model = Film
    template_name = 'films/detail.html'


class CommentCreate(CreateView):
    model = Comment
    fields = ['body']
网址:


您需要覆盖视图的
form\u valid
方法,以使用当前用户和胶片更新新的注释实例:

class CommentCreate(CreateView):
    model = Comment
    fields = ['body']

    def form_valid(self, form):
        film = Film.objects.get(pk=self.kwargs['film_id']) 
        form.instance.user = self.request.user         
        form.instance.film = film 
        return super(CommentCreate, self).form_valid(form)
要修复“无URL重定向到”,可以将
get\u absolute\u URL()
方法添加到注释模型中:

def get_absolute_url(self):
    return reverse('detail', kwargs={'pk': self.film.pk})

您需要覆盖视图的
form\u valid
方法,以使用当前用户和胶片更新新的注释实例:

class CommentCreate(CreateView):
    model = Comment
    fields = ['body']

    def form_valid(self, form):
        film = Film.objects.get(pk=self.kwargs['film_id']) 
        form.instance.user = self.request.user         
        form.instance.film = film 
        return super(CommentCreate, self).form_valid(form)
要修复“无URL重定向到”,可以将
get\u absolute\u URL()
方法添加到注释模型中:

def get_absolute_url(self):
    return reverse('detail', kwargs={'pk': self.film.pk})

您尚未显示视图。很抱歉,我刚刚添加了它。您尚未显示视图。很抱歉,我刚刚添加了它,并添加了以下代码:“没有要重定向到的URL。请在模型上提供URL或定义get_absolute_URL方法。”但它已成功保存。谢谢。我不理解return super,我不得不将“细节”改为“电影:细节”,但它现在起作用了。这有助于我理解SuperControl。我添加了以下代码:“没有要重定向到的URL。请在模型上提供URL或定义get_absolute_URL方法。”但它已成功保存。谢谢。我不理解return super,我不得不将“细节”改为“电影:细节”,但它现在起作用了。这帮助我理解了超级
from django import forms
from .models import Comment

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('body',)
class CommentCreate(CreateView):
    model = Comment
    fields = ['body']

    def form_valid(self, form):
        film = Film.objects.get(pk=self.kwargs['film_id']) 
        form.instance.user = self.request.user         
        form.instance.film = film 
        return super(CommentCreate, self).form_valid(form)
def get_absolute_url(self):
    return reverse('detail', kwargs={'pk': self.film.pk})