2015-11-20 4 views
0

Я новичок в django, и я пытаюсь реализовать модели django в django-admin.Django admin manytomany field

Вот мой models.py:

class Author(models.Model): 
    salutation = models.CharField(max_length=10) 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    email = models.EmailField() 

    def __str__(self): 
     return self.first_name 


class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    address = models.CharField(max_length=100) 
    website = models.URLField() 

    def __str__(self): 
     return ' %s ----> %s' % (self.name, self.address) 


class Book(models.Model): 
    title = models.CharField(max_length=30) 
    publication_date = models.DateField() 
    authors = models.ManyToManyField(Author) 
    publisher = models.ForeignKey(Publisher) 

    def __str__(self): 
     return self.title 

В этом, когда я создаю новую книгу через сайт администратора он должен позволить мне выбрать один или несколько авторов, но вместо этого все авторы выбираются автоматически и нет возможности удалить их. Существует знак «плюс», чтобы добавить больше авторов, но ни один из них не удаляет авторов, которые уже были связаны.

Я хочу, чтобы определенные авторы выбрали для каждой конкретной книги.

+0

Offtopic: Сделайте имена ваших классов уникальными и заглавными. участников -> Участник. Во-вторых, НЕ делайте свой собственный объект-член, но используйте встроенную модель User. Сохранение паролей, таких как БОЛЬШОЕ! Серьезно, не делай этого! ;) – allcaps

+1

Имена полей должны быть строчными. Автор -> автор. Даже подсветка кода SO дает вам этот намек. – allcaps

+0

да .. ik .. я просто практиковал .... @ allcaps – Sidharth

ответ

0

Я считаю, что вы неправильно поняли, как работает виджет. Вот пример использования виджета Джанго по умолчанию для ManyToManyField

Пример: модель учителя связана с языковой моделью:

teaching_languages = models.ManyToManyField('Language') 

В следующем случае, английский и Испанцы выбраны в качестве значений, относящихся к модели учителя, в то время как французский и немецкий не выбраны. Значок «зеленый +» позволяет вам добавить другой язык в список языков обучения.

+0

ohhh. k .. спасибо. a ton .. – Sidharth

+0

Можно ли создать admin.TabularInline или admin.StackedInline для многоголосного поля? Я пытался, но это, похоже, единственный виджет, доступный для многогодового поля. – nobism