2013-08-09 2 views
1

я следующие две модели: models.pyДжанго: ManyToManyField отсутствует из таблицы

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 

forms.py

class MovieForm(forms.ModelForm): 
    genre = forms.CharField(widget=forms.TextInput) 
    class Meta: 
     model = Movies 

, когда я запускаю SyncDB movies , genre , movies_genre таблицы создаются

movies_genre table has (id, movies_id , genre_id) 

Однако в фильмах стола, не cloumn не создана для жанрового поля, которое должно нравится genre_id

почему genre_id поле отсутствует из таблицы фильмов?

EDIT: ................. как я добавить данные:

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.... 

ответ

0

Как указывалось ранее следующее Джанго создает отдельная таблица для многих и многих полей. Также в чем смысл этой функции def genre_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() 

Читать здесь https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

+0

спасибо, наконец, это правильно – navyad

3

Джанго создает отдельную таблицу для многих многих областях, со ссылками на как новую таблицу tables.The будет foreign key для обеих таблиц, movies и genre. Таким образом, вы не увидите новую колонку, но вы обязательно найдете новую таблицу.

Поэтому, когда вы добавляете genre для movie, новая строка создается для каждого genre вы добавляете в movies_genre таблице.

Например фильм a с фильмом id 1, добавить жанр б, в с жанром id х 1,2, то создаются в movie_genre таблице

id  movie_id genre_id 
1  1   1 
2  1   2 
+0

когда я добавления фильма, хотя таблица фильмов и жанр был заполнен, movie_genre таблица не заполняется – navyad

+0

ли у добавить жанр к фильму? – rjv

+0

жанр не поле в таблице фильмов, то как я могу добавить? – navyad

Смежные вопросы