Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2011 20:07:00

wildDAlex
От:
Зарегистрирован: 2010-09-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Два аналогичныйх ForeignKey в модели

Здравствуйте!
Создаю модель.

from django.db import models

class Peoples(models.Model): # Режиссеры/Сценаристы
name = models.CharField(max_length=100)

class Movie(models.Model):
title = models.CharField(max_length=100)
director = models.ForeignKey(Peoples) # Режиссер
screenwriter = models.ForeignKey(Peoples) # Сценарист
Как видно, режиссеры и сценаристы связаны с одной таблицей “людей”.
При этом при проверке структуры модели python manage.py validate получаю ошибку.
python manage.py validate
Error: One or more models did not validate:
movies.movie: Accessor for field 'director' clashes with related field 'Peoples.
movie_set'. Add a related_name argument to the definition for 'director'.
movies.movie: Accessor for field 'screenwriter' clashes with related field 'Peop
les.movie_set'. Add a related_name argument to the definition for 'screenwriter'
.
Если директора или скринврайтера закомментить, то валидация проходит.
Не пойму, что он хочет, текст ошибки не совсем понял. Почему оно не дает ссылаться на одну таблицу дважды? Или есть более элегантное решение?



Офлайн

#2 Июнь 21, 2011 21:21:32

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

Два аналогичныйх ForeignKey в модели

Это заморочка с обратными связями
Как и подсказывает ошибка - назначьте им разные related_name, и все должно заработать.

director = models.ForeignKey(Peoples, related_name='directors')      # Режиссер
screenwriter = models.ForeignKey(Peoples, related_name='screenwriters')
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name



Отредактировано (Июнь 21, 2011 21:23:44)

Офлайн

#3 Июнь 21, 2011 22:18:58

wildDAlex
От:
Зарегистрирован: 2010-09-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Два аналогичныйх ForeignKey в модели

Спасибо, помогло.
Даже и не знал о существовании related_name, потому и не понял текст ошибки.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version