2016-07-22 6 views
0

со следующими моделями Django:модель Django асимметричные отношения

class Author(models.Model): 
    name = models.CharField(max_length=30) 
    bestbookaccordingtome=models.????(Author,null=True, blank=True, default = None) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.OnetoOneField(Author) 

Я хочу классические отношения у каждой книги есть один автор (только).

Но я также хочу уметь назначить выбранную книгу автору (например, моя любимая книга этого автора).

Я попробовал внешний ключ, но django ему не понравилось. Любой чистый способ python для этого?

+0

Если вы хотите моделировать выбор пользователя для любимой книги автора, то я действительно чувствую, что это поле должно жить по принципу «многие ко многим» между пользователями и авторами. подумайте об этом так: Ваша любимая работа Оскара Уайльда может быть Важнейшим Быть Серьезным, в то время как для меня это определенно должно быть Изображение Дориана Грея. возьми? –

+0

В этом случае я буду единственным, кого выберете, пользователи не будут иметь на нем свое слово. – LittleBigFrog

+0

Кстати, если в каждой книге есть только один автор, я не должен использовать foreignkey? – LittleBigFrog

ответ

0

Что вам нужно, это ManyToManyField.

class Author(models.Model): 
    name = models.CharField(max_length=30) 
    bestbookaccordingtome = models.ManyToManyField('self', symmetrical=False, related_name='best_book_according_to_me') 

Кроме того, если вам нужно указать дополнительные поля в вашей п-м модели, вы можете использовать through указать название модели.

Надеюсь, это поможет!

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