0

我有两个对象模型,NewsObject 和 StockObject。stock 对象是 news 对象中的外键。

class stockObject(models.Model):
    stock_name = CharField(max_length=100, blank=True, null=True)
    stock_tag = CharField(max_length=100, blank=True, null=True)

    def __str__(self):
        return self.stock_name

class newsObject(models.Model):
    title = CharField(max_length=100, blank=True, null=True)
    body = TextField(blank=True, null=True)
    stock = ForeignKey(stockObject, on_delete=models.SET_NULL, blank=True, null=True)

我在 ModelAdmin 类中使用了 autocomplete_fields 属性,因为我想要新闻中股票的可搜索下拉列表。如文档中所述,我还在股票 ModelAdmin 中添加了 search_fields 。

这就是我的 admin.py 的样子:

class stockAdmin(admin.ModelAdmin):
    list_display = ['stock_name', 'stock_tag']
    search_fields = ['stock_name']

class newsAdmin(admin.ModelAdmin):
    list_display = ['title', 'body', 'stock']
    search_fields = ['title', 'body', 'stock']
    autocomplete_fields = ['stock']

现在,问题是我在 Django 管理站点上获得了该字段的可搜索下拉列表,但它只是实际模板屏幕上的一个下拉列表(不可搜索)。我有一个调用模板的基本视图,如下所示:

视图.py

def createNews(request):
    form = NewsForm()
    if request.method == 'POST':
        form = NewsForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/backoffice/')

    context = {'form' : form}
    return render(request, 'NewsForm.html', context)

NewsForm.html 是:

{% extends "base.html" %}

{% load static %}
       {% block content %} 
       <form action="" method="POST">
           {% csrf_token %}
           {{ form }}
           <input type="submit" name="Submit">
       </form>
{% endblock %} 

我一直想知道这种行为的原因可能是什么。尝试了多种方法,但都没有奏效。我可能在这里缺少什么?

Django 管理站点图像Django 管理站点图像

Django 模板图像Django 模板图像

4

1 回答 1

1

我认为您已经编写了所有模型,camelCase因此首先将它们更改为PascalCase.

其次,您models在所有模型中都错过了:

像这样编写它们,models在每个数据类型之前添加:

from django.db import models

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

不仅datatype是领域。

于 2022-03-03T17:15:58.660 回答