Django:表中缺少ManyToManyField
我有以下两种型号: 型号.pyDjango:表中缺少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)
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
当我运行syncdbmovies时,将创建流派、电影\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