Django:表中缺少ManyToManyField

Django:表中缺少ManyToManyField,django,Django,我有以下两种型号: 型号.py class Genre(models.Model): name = models.CharField(max_length=50, blank=True, unique=True) def __unicode__(self): return self.name class Movies(models.Model): title = models.CharField(max_length=50, blank=False)

我有以下两种型号: 型号.py

class Genre(models.Model):
    name = models.CharField(max_length=50, blank=True, unique=True)
    def __unicode__(self):
        return self.name

class Movies(models.Model):
    title = models.CharField(max_length=50, blank=False) 
    plot =  models.CharField(max_length=500, blank=True)
    actors = models.CharField(max_length=200, blank=True)
    director = models.CharField(max_length=100, blank=True) 
    genre = models.ManyToManyField(Genre)


    def __unicode__(self):
        return self.title
class MovieForm(forms.ModelForm):
    genre = forms.CharField(widget=forms.TextInput)
    class Meta:
        model = Movies
forms.py

class Genre(models.Model):
    name = models.CharField(max_length=50, blank=True, unique=True)
    def __unicode__(self):
        return self.name

class Movies(models.Model):
    title = models.CharField(max_length=50, blank=False) 
    plot =  models.CharField(max_length=500, blank=True)
    actors = models.CharField(max_length=200, blank=True)
    director = models.CharField(max_length=100, blank=True) 
    genre = models.ManyToManyField(Genre)


    def __unicode__(self):
        return self.title
class MovieForm(forms.ModelForm):
    genre = forms.CharField(widget=forms.TextInput)
    class Meta:
        model = Movies
当我运行syncdb
movies时,将创建流派、电影\u流派

movies_genre table has (id, movies_id , genre_id)
然而,在电影表中,没有为类型字段创建cloumn,它应该像类型id

为什么电影表中缺少类型id字段

编辑:……..我如何添加数据:

def genre_save(request):
   genre_name = request.POST['genre']
   genre_obj = Genre(name=genre_name)
   genre_obj.save() 
   movie_obj = Movies(genre=genre_obj.id)
   movie_obj.save() // error
TypeError“流派”是此函数的无效关键字参数

def add_movie(request):
    if request.method=="POST":
     genre_save(request)
     form_post = MovieForm(request.POST)
     form_post.save()
     /// other stuff....

Django为多对多字段创建一个单独的表,并引用这两个表。新表将为这两个表提供
外键
电影
流派
。因此,您不会看到一个新列,但您肯定会找到一个新表

因此,每当您为
电影
添加
流派
时,都会为您在
电影_流派
表中添加的每个
流派
创建一个新行

例如,对于具有电影
id
1的电影
a
,添加具有电影
id
s1,2的类型b、c,在
movie\u类型
表中创建以下内容

id     movie_id   genre_id
1        1           1 
2        1           2

正如前面指出的,Django为多对多字段创建了一个单独的表。另外,此
def genre\u save(request)
功能的意义是什么?为什么你不能按照你的观点去做呢

无论如何,您可以尝试以下方法:

def genre_save(request):
    genre_name = request.POST['genre']
    genre_obj = Genre(name=genre_name)
    genre_obj.save() 
    movie_obj = Movies(name="My Movie")
    movie_obj.save()
    # this is how you should do it
    movie_obj.genre.add(genre_obj)
    # OR like this
    movie_obj.genre = [genre_obj]
    movie_obj.save()

请阅读此处

当我添加电影时,虽然电影和流派表已填充,但电影\流派表未填充您是否将流派添加到电影中?流派不是电影表中的字段,那么我如何添加?如何添加数据?尝试使用django admin