2017-02-20 53 views
0

У меня есть 2 модели, которые связаны через OneToOneField Relationship. Это то, что они выглядят как:Как форматировать отношения OneToOne в Django Admin?

class UserText(models.Model): 
    user_input = models.CharField(max_length=2000) 

class Question(models.Model): 
    user_text = models.OneToOneField(
     UserText, 
     on_delete=models.CASCADE, 
     blank=True, 
     null=True, 
    ) 
    user_questions = models.CharField(max_length=2000) 

Я хотел бы каждый UserText иметь модель вопросов, связанных с ней в базе данных. Вот почему я использовал отношения OneToOne. Отсюда я не знаю, как представить эти отношения внутри моего admin.py, чтобы при просмотре в моей базе данных с помощью администратора я вижу каждую модель UserText со своим подключенным Вопросом. Это то, что мой взгляд admin.py как сейчас:

from django.contrib import admin 
from v2.models import UserText 
from v2.models import Question 

@admin.register(UserText) 
class UserTextAdmin(admin.ModelAdmin): 
    model = UserText 
    display = ('user_input') 

@admin.register(Question) 
class QuestionAdmin(admin.ModelAdmin): 
    model = Question 
    display = ('user_questions') 

Что мне нужно добавить или изменить в моем admin.py так, что каждая модель Вопроса связана с его родителями модели UserText через отношения OneToOne?

+1

Я считаю [этот вопрос] (http://stackoverflow.com/questions/16070809/how-to-i-show-a-list-of-foreignkey-reverse-lookups-in-the-django-admin- интерфейс) может быть полезным для вас. – Neelik

+1

@Neelik Это указывает на меня в правильном направлении, спасибо. Я думаю, что у меня есть это отсюда! – jblew

ответ

0

Вам просто нужно позвонить в соответствующее поле.

Если вы находитесь внутри Вопрос интерфейс администратора необходимо добавить user_text в форму:

@admin.register(Question) 
class QuestionAdmin(admin.ModelAdmin): 
    ... 
    fields = ('user_text', ...) 

Если вы находитесь внутри UserText интерфейс администратора можно использовать inlines:

class QuestionInline(admin.TabularInline): 
    model = Question 

@admin.register(UserText) 
class UserTextAdmin(admin.ModelAdmin): 
    ... 
    inlines = [QuestionInline, ] 

Btw , a OneToOneField похож на ForeignKey с unique=True, другими словами, у каждого пользователя может быть только один вопрос. Если у пользователя может быть более одного вопроса, вы должны переключиться на ForeignKey.

+0

Я использовал встроенный подход, и он работает, как я и хотел. Я хочу, чтобы каждый UserText имел несколько вопросов, связанных с ним, будет ли использование 'ForeignKey' требовать каких-либо изменений внутри встроенного кода администратора? – jblew

+0

Нет. Просто обновите поле «Модель» до «ForeignKey». –

+0

Хорошо, круто. Поэтому теперь я хочу назначить каждый отдельный вопрос одному из экземпляров вопроса OneToMany в интерфейсе администратора UserText. В настоящий момент администратор показывает несколько полей вопросов 'StackedInline' для каждого UserText, отсюда как добавить каждый вопрос в каждое поле« Inline »? – jblew