【问题标题】:How to display InLine objects in Django Admin Interface如何在 Django 管理界面中显示内联对象
【发布时间】:2017-02-20 18:19:09
【问题描述】:

这是我当前的管理界面:

用户通过名为“UserText”的表单和模型输入文本。我使用 NLP 编写了一个函数来仅从 UserText 中提取问题。我希望这些单独的问题中的每一个都显示在管理界面的每个“用户问题”部分中。截至目前,我无法让它发挥作用。

这是我当前的代码:

模型.py

class UserText(models.Model):
    user_input = models.TextField()

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

Views.py

def user_text_view(request):
    form = forms.UserTextForm()
    if request.method == 'POST':
        form = forms.UserTextForm(request.POST)
        if form.is_valid():
            UserText = models.UserText
            Question = models.Question
            user_input = request.POST.get('user_input', '')
            user_input_obj = UserText(user_input = user_input)
            user_questions_obj = Question(user_text = user_input_obj,
                user_questions = Question_Init(user_input_obj))
            user_input_obj.save()
            user_questions_obj.save()
            print("Thanks for the questions!")

    else:
        form = forms.UserTextForm()

    return render(request, 'text_input_form.html', {'form': form})

Admin.py

class QuestionInLine(admin.StackedInline):
    model = Question
    display = ('user_questions_obj')


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

    ]

最后是我的功能:

def Question_Init(user_input_obj):

    Beginning_Question_Prompts = ("Who","Whom","What","Where","When","Why","Which",
    "Whose","How","Was","Were","Did","Do","Does","Is")
    Ending_Question_Prompts = ("?",":","...")
    questions = []

    text1 = user_input_obj.user_input

    textList = sent_tokenize(text1)

    for sentence in textList:
        if sentence.startswith(Beginning_Question_Prompts):
           questions.append(sentence)

        if sentence.endswith(Ending_Question_Prompts):
            questions.append(sentence)

    return questions

我知道这很多,抱歉,但我不知道如何让每个问题都填充到我的管理界面中的问题字段中。谢谢

【问题讨论】:

    标签: python django admin inline


    【解决方案1】:

    问题不在于您的管理界面,而在于您如何创建 Question 对象。您需要遍历函数的结果并为每个创建链接项:

    for question_text in Question_Init(user_input_obj):
         user_questions_obj = Question(user_text=user_input_obj,
                                       user_questions=question_text)
         user_questions_obj.save()
    

    【讨论】:

    • 丹尼尔·罗斯曼……你救了我的命!非常感谢大声笑,我永远不会想到这一点。也许几周后,但仍然,谢谢伙计。但由于某种原因,每个问题都被保存了两次。您是否在我的代码中看到任何会导致此问题的错误?
    • 当然;您的函数中的两个条件都可能(并且确实很可能)为真,即句子以疑问词开头并以问号结尾。要么在第二个 if 之前使用 else,要么将两个条件放入同一个 if 语句中,使用 or:if sentence.startswith(Beginning_Question_Prompts) or sentence.endswith(Ending_Question_Prompts):
    猜你喜欢
    • 2010-09-16
    • 2011-01-27
    • 1970-01-01
    • 2017-08-12
    • 2012-04-07
    • 2013-07-09
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多