2015-06-24 81 views
0

我使用Django的教程1.8 &的Python 3.4和现在的页面具有可添加多个选择的问题,而是选择将无法访问其相应的问题:创建一个双向多对多关系有关管理Django模型页

#models.py 
class Question(models.Model): 
    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

    def __str__(self): 
     return self.question_text 

    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 
    was_published_recently.admin_order_field = 'pub_date' 
    was_published_recently.boolean = True 
    was_published_recently.short_description = 'Published recently?' 

class Choice(models.Model): 
    question = models.ForeignKey('Question') 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

    def __str__(self): 
     return self.choice_text 
#admin.py 
from django.contrib import admin 

from .models import Question, Choice 

# Register your models here. 

class ChoiceInline(admin.TabularInline): 
    model = Choice 
    extra = 3 

# class QuestionInline(admin.TabularInline): 
#  model = Question.choice.through 
#  extra = 3 

class QuestionAdmin(admin.ModelAdmin): 
    # fieldsets = [ (None, {'fields': ['question_text']}), 
    #     ('Date information', {'fields': ['pub_date'],'classes': 
    #     ['collapse']}) 
    #    ] 
    list_display = ('question_text', 'pub_date', 'was_published_recently') 
    list_filter = ['pub_date'] 
    search_fields = ['question_text'] 
    inlines = [ChoiceInline] 

class ChoiceAdmin(admin.ModelAdmin): 
    fields = ['choice_text', 'votes'] 

    #inlines = [QuestionInline] 

admin.site.register(Question, QuestionAdmin) 
admin.site.register(Choice, ChoiceAdmin) 

但是,我希望能够让问题有很多选择,并且能够在管理员中访问这些选择,然后选择也可以访问管理页面中的相应问题。

我正在考虑为Choice创建一个ManyToMany变量,但似乎删除了需要外键的TabularInline编辑功能。

我不知道如何解决这个问题。

回答

0

我想我取得了我想要的东西部分:

models.py:

class Question(models.Model): 
    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

    def __str__(self): 
     return self.question_text 

    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 
    was_published_recently.admin_order_field = 'pub_date' 
    was_published_recently.boolean = True 
    was_published_recently.short_description = 'Published recently?' 

class Choice(models.Model): 
    #question = models.ForeignKey('Question') 
    related_question = models.ManyToManyField(Question, related_name='questions') 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

    def __str__(self): 
     return self.choice_text 

class Related(models.Model): 
    question = models.ForeignKey(Question) 
    choice = models.ForeignKey(Choice) 

admin.py:

class RelatedInline(admin.TabularInline): 
    model = Related 
    extra = 1 


class QuestionAdmin(admin.ModelAdmin): 
    # fieldsets = [ (None, {'fields': ['question_text']}), 
    #     ('Date information', {'fields': ['pub_date'],'classes': 
    #     ['collapse']}) 
    #    ] 
    #list_display = ('question_text', 'pub_date', 'was_published_recently') 
    #list_filter = ['pub_date'] 
    #search_fields = ['question_text'] 
    #inlines = [ChoiceInline] 
    inlines = (RelatedInline,) 

class ChoiceAdmin(admin.ModelAdmin): 
    #fields = ['choice_text', 'votes'] 
    #filter_horizontal = ('related_question',) 
    #list_display = ('question',) 
    #list_display_links = ('question',) 
    #inlines = [QuestionInline] 
    #list_filter = ('related_question', admin.RelatedOnlyFieldListFilter) 
    inlines = (RelatedInline,) 
    exclude = ('related_question',) 
admin.site.register(Question, QuestionAdmin) 
admin.site.register(Choice, ChoiceAdmin 

而本作,所以我可以将相关的选择添加到问题和问题的选择。

但是我还想知道在Question模型中是否有编辑Choice模型的方法?或者在选择特定选择时直接链接到模型本身。

来源:https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#working-with-many-to-many-intermediary-models