python - Django 中的 ModelForm - 选择未填充适当的数据?

标签 python django django-models django-forms modelform

我在 Django 中有一个模型表单,可以很好地显示 - 但它没有提取适当的信息。

出现了选择下拉列表,但没有填充选项,我正在努力找出原因。

我的模型如下所示:

class Mileage(models.Model):
    start_location = models.ForeignKey(Location, on_delete=models.PROTECT, related_name='start_locations')
    end_location = models.ForeignKey(Location, on_delete=models.PROTECT, related_name='end_locations')
    miles = models.DecimalField(max_digits=8, decimal_places=2)
    user_id = models.IntegerField(null=True)

    def __str__(self):
        return self.miles

class Location(models.Model):
    name = models.CharField(max_length=255)
    address = models.CharField(max_length=255, null=True)
    latitude = models.DecimalField(max_digits=9, decimal_places=6, null=True)
    longitude = models.DecimalField(max_digits=9, decimal_places=6, null=True)
    user_id = models.IntegerField(null=True)

    def __str__(self):
        return self.id

class Trip(models.Model):
    start_location = models.CharField(max_length=255)
    end_location = models.CharField(max_length=255)
    miles = models.DecimalField(max_digits=7, decimal_places=2)
    user = models.ForeignKey(User, on_delete=models.PROTECT)
    trip_date = models.DateTimeField('trip date')

    def __str__(self):
        return self.id

我的模型表单如下所示:

class TripsForm(ModelForm):
    class Meta:
        model = Trip
        fields = ['start_location', 'end_location', 'miles', 'trip_date']
        widgets = {
            'start_location': forms.Select(
                attrs={
                    'class': 'form-control',
                    'id': 'start_location'
                }
            ),
            'end_location': forms.Select(
                attrs={
                    'class': 'form-control',
                    'id': 'end_location'
                }
            ),
            'miles': forms.NumberInput(
                attrs={
                    'class': 'form-control',
                    'id': 'miles',
                    'readonly': 'readonly'
                }
            ),
            'trip_date': forms.TextInput(
                attrs={
                    'class': 'form-control monthpicker datepicker',
                    'id': 'trip_date'
                }
            ),
        }

在我看来,我在 view.py 中这样调用它:

# Create trip
def trip_create(request):
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        form = TripsForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # Save the form -- will handle this all later
            trip.save()
            return HttpResponseRedirect('/thanks/')
    # if a GET (or any other method) we'll create a blank form
    else:
        form = TripsForm()
        # Return to trips with list of date
    return render(request, 'trips/create.html', {'form': form})

“start_locations”和“end_locations”选择应填充所有位置 - 目前选择完全为空。

我一直在查看文档:在这种情况下,modelformset_factory() 是否值得深入研究?

我只是不确定如何继续让它填充这些下拉菜单。

最佳答案

目前,您正在为 Trip.start_locationTrip.end_location 使用 CharField。如果您使用选择小部件,则由您来创建填充它的选项。

如果您对 start_locationend_location 字段使用 ForeignKey,那么 Django 将为您填充选择。

class Trip(models.Model):
    start_location = models.ForeignKey(Location, on_delete=models.PROTECT, related_name='trip_start_locations')
    end_location = models.ForeignKey(Location, on_delete=models.PROTECT, related_name='trip_end_locations')

对模型进行更改后,您必须进行迁移,然后再迁移。

请注意,我已将 trip 包含在 lated_name 中,因为相关名称用于将您从 Location 模型带回到旅行。您可能需要更新 Mileage 模型的 lated_name 以包含 mileage

关于python - Django 中的 ModelForm - 选择未填充适当的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44370802/

相关文章:

python - Django postgresql 外键

python - 在 python 中编写 mysql 查询

python - 如何克隆列表以使其在分配后不会意外更改?

javascript - 仅显示首次访问 Django 的介绍视频

Django ManyToMany 与选项

python - Django 更新表

python - 使用文件处理程序时 numpy savetxt 失败

python - Django 根据字段值过滤

python - Django 相交计数注释用于排序

python - Django 查询检索被选为外键的项目?