Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django窗体中显示带有外键和选项的单个窗体?_Python_Python 3.x_Django_Django Models_Django Forms - Fatal编程技术网

Python 如何在Django窗体中显示带有外键和选项的单个窗体?

Python 如何在Django窗体中显示带有外键和选项的单个窗体?,python,python-3.x,django,django-models,django-forms,Python,Python 3.x,Django,Django Models,Django Forms,我的目标是显示一个包含所有这些字段的表单,我坚持使用城市模型中的显示城市和描述字段,第一个需要显示一个包含所有城市选项的选择框,另一个只显示一个文本字段 因此,我需要使用以下格式显示表单: 城市(从所有选项中选择框) 描述 日期 地位 CITIES_CHOICES = (('RJ', 'Rio de Janeiro'), ('NY', 'New York'), ('PIT', 'Pittsburgh')) class City(models.Model): city =

我的目标是显示一个包含所有这些字段的表单,我坚持使用城市模型中的显示城市和描述字段,第一个需要显示一个包含所有城市选项的选择框,另一个只显示一个文本字段

因此,我需要使用以下格式显示表单:

  • 城市(从所有选项中选择框)

  • 描述

  • 日期

  • 地位

    CITIES_CHOICES = (('RJ', 'Rio de Janeiro'), ('NY', 'New York'), ('PIT', 'Pittsburgh'))
    
    
     class City(models.Model):
         city = models.CharField(max_length=50, choices=CITIES_CHOICES)                    
         description = models.TextField()
    
         def __str__(self):
             return self.city
    
    
      class Checkin(models.Model):
         destination = models.ForeignKey(City, on_delete=models.SET_NULL)
         date = models.DateTimeField()
         status = models.BooleanField()
    
我已经使用Modelform创建了一个表单,但是如何才能从城市模型中显示字段,而不是正确地显示de City对象

知道我现在要去哪里吗

forms.py

class DocumentForm(forms.ModelForm):
    class Meta:
        model = Checkin

有一些方法可以做到这一点。其中一个更简单的方法是创建两个表单,一个是城市的
ModelForm
,另一个是签入的
ModelForm
。在视图中,您可以将这两个表单传递到上下文并验证这两个表单。您可以将它们加载到HTML页面上相同的表单标记中

我不会在
签入
表单中包含“city”字段,您可以在视图中手动处理

def some_view(request):
    if request.method == 'GET':
        city_form = CityForm()
        Checkin_form = CheckInForm()

    elif request.method == 'POST':
        city_form = CityForm(request.POST)
        checkin_form = CheckInForm(request.POST)
        if city_form.is_valid() and checkin_form.is_valid():
            city = city_form.save()
            date = checkin_form.cleaned_data.get('date')
            status = checkin_form.cleaned_data.get('status')
            Checkin.objects.create(
                destination=city,
                date=date,
                status=status
            )

    context = {
        'city_form': city_form,
        'checkin_form': checkin_form,
    }
    return render(request, <template>, context)

def some_视图(请求):
如果request.method==“GET”:
城市形式=城市形式()
签入表单=签入通知()
elif request.method==“POST”:
城市表单=城市表单(request.POST)
签入表单=签入通知(request.POST)
如果city\u form.is\u valid()和checkin\u form.is\u valid():
城市=城市\表单保存()
日期=签入表单。已清理数据。获取('date')
状态=签入表单。已清理数据。获取('status')
Checkin.objects.create(
目的地=城市,
日期=日期,
状态=状态
)
上下文={
“城市形态”:城市形态,
“签入表单”:签入表单,
}
返回呈现(请求、上下文)
这是一个简单的示例,您可以在单个表单中创建它,如果需要,甚至可以通过API创建它。我认为在基于类的视图中也会更好