如何基于模型中的外键字段在Django中开发下拉菜单

时间:2019-04-29 02:25:11

标签: django forms foreign-keys dropdown

我正在开发Django表单来上传文件。该表格基于模型(文件)。模型(文件)具有外键字段(repo_id)。此repo_id是存储库模型中的主键。

我希望用户能够选择将文件放入哪个repo_id。我需要使用表格中的下拉列表在此字段中插入一个值。

在HTML模板中,下拉列表显示为“存储库对象(repo_id)” screen shot of the drop down list

按照教程,我已经在models.py,views.py,forms.py和HTML模板中开发了两个模型(文件和存储库)。该表单正在运行,并且还将数据保存在数据库表中。

我只想更新下拉菜单以仅在存储库模型中显示指标名称,而不是在存储库对象中显示

这是我的密码。

models.py

from django.db import models

# Create your models here.
class Repository(models.Model):
    source = models.TextField(db_column='source', blank=True, null=True)  # Field name made lowercase.
    indicator = models.TextField(db_column='indicator', blank=True, null=True)  # Field name made lowercase.
    key_aspect = models.TextField(db_column='key_aspect', blank=True, null=True) 
    category = models.TextField(db_column = 'category')
    table_id = models.TextField(db_column='table_id', blank=True, null=True)
    data_returning = models.TextField(db_column='data_returning', blank=True, null=True)
    data_source = models.TextField(db_column='data_source', blank=True, null=True)
    value = models.TextField(db_column='value', blank=True, null=True)  # Field name made lowercase.
    year = models.TextField(db_column='year', blank=True, null=True)  # Field name made lowercase.
    location = models.TextField(db_column='location', blank=True, null=True)  # Field name made lowercase.



class files(models.Model):
    repo_id = models.ForeignKey(Repository, on_delete = models.CASCADE)
    username = models.CharField(db_column='username',max_length = 45)
    date = models.DateTimeField(auto_now_add=True, db_column = 'date')
    file = models.FileField(upload_to='documents/', db_column = 'file')
    username = models.CharField(db_column='username',max_length = 45)


    def __unicode__(self):
        return self.indicator_name

forms.py
class DocumentForm(forms.ModelForm):
class Meta:
    model = files
    fields = ('username',  'file', 'repo_id')



views.py
@login_required
def file_upload(request):
     websiterepository = Repository
     #indicator_queryset = websiterepository.objects.filter(category = 'P').values_list('id','indicator')

    if request.method == 'POST':
         documentform = DocumentForm(request.POST, request.FILES)

         if documentform.is_valid():
             documentform.save()
         return redirect('file_upload')
    else:
         form = DocumentForm()
         #documentform = DocumentForm(prefix = 'documentform')
         #searchform = SearchForm(indicator_queryset = indicator_queryset, prefix = 'searchform')
         #form = {'documentform':documentform, 'searchform':searchform}
         #return render(request, 'form_file_upload.html', form )
         return render(request, 'form_file_upload.html', {'form':form })

我知道这是篇短文。如果您感到自豪,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

将模型更改为以下代码

available_on

如果要模型返回字段值,则必须定义一个自函数,否则它将返回各自的对象。