Как сделать так, чтобы модели, связанные через отношения ManyToMany, редактировались в двух местах одновременно в Django admin? - PullRequest
1 голос
/ 09 июня 2011

У меня две модели - Новости и Тема.У модели новостей есть ManyToManyField, относящийся к теме, например:

subjects = models.ManyToManyField(NewsSubject, verbose_name=u'Subjects', blank=True,null=True,related_name='news')

И мне нужно иметь возможность не только выбирать темы для новостей в админке, но и выбирать новости при редактировании темы.

Я начал с создания формы модели:

class NewsSubjectForm(forms.ModelForm):

    news = ModelMultipleChoiceField(queryset=News.objects.all(), 
        label="News", 
        required=False,
        #initial=News.objects.all(),
    )

    class Meta:
        model = NewsSubject

Вот вопрос - как мне указать начальные значения для новостей в соответствии с обратным отношением «многие ко многим»?А как добавить кнопку плюса для простого добавления?

1 Ответ

2 голосов
/ 09 июня 2011

Я не уверен, что это может удовлетворить ваши потребности, но я сделал нечто подобное, используя TabularInline.Что-то вроде этого должно работать (я не тестировал следующий код).

class Subject(models.Model):
    ...

class News(models.Model):
    subject = models.ManyToManyField(Subject, through="NewsSubject")

class NewsSubject(models.Model):
    news = models.ForeignKey(News)
    subject = models.ForeignKey(Subject)  

class NewsOfSubjectInline(admin.TabularInline):
    model = NewsSubject
    raw_id_fields = ('news',)

class SubjectAdmin(admin.ModelAdmin):
    inlines = [NewsOfSubjectInline,]

class SubjectOfNewsInline(admin.TabularInline):
    model = NewsSubject
    raw_id_fields = ('subject',)

class NewsAdmin(admin.ModelAdmin):
    inlines = [SubjectOfNewsInline,]
...