微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用来自 postgres 数组字段的值在 Django 视图中呈现下拉列表

如何解决使用来自 postgres 数组字段的值在 Django 视图中呈现下拉列表

以下是模型中的示例:

class Shipment(models.Model):
    shipment_id = models.BigAutoField(null=False,primary_key=True)
    potential_shipping_dates = ArrayField(models.DateField(),verbose_name='Ship Dates',null=True)

以下是我正在尝试的形式:

class ShippingForm(forms.Form):
    potential_shipping_dates = forms.ModelChoiceField(queryset=Shipment.objects.all())
    def __init__(self,*args,**kwargs):
        super(ShippingForm,self).__init__(*args,**kwargs)

这里是我的表单被添加到上下文的地方:

context['shippingForm'] = ShippingForm(initial=??what_goes_here_maybe??)

我的表单呈现良好,但我想为每个选项显示一个带有日期的下拉列表。

解决方法

好吧,这有点复杂,但我想我明白你想要做什么,你哪里出错了。

所以您有一个 Shipment 模型,每个 Shipment 实例都有一个字段,其中包含几个不同的 potential_shipping_dates

假设您有 2 批货物:

IN : ship1 = Shipment.objects.first()
OUT:

IN : ship1.potential_shipping_dates
OUT: ['01/01/2021','02/02/2021']

IN : ship2 = Shipment.objects.last()
OUT:

IN : ship2.potential_shipping_dates
OUT: ['03/03/2021','04/04/2021']

现在,您是否希望下拉菜单包含所有 4 个日期作为可能性,并选择 Shipment

还是要在表格中选择货件后选择日期?

^^ 在评论中回答

好的,所以您需要将实例传递给表单:

views.py

# Inherit from Django's UpdateView to have `instance` passed through to the form
class ShippingFormView(UpdateView):
    model = Shipment
    form_class = ShippingForm


# Or if you don't want to inherit from inherit from UpdateView
class ShippingFormView(Blah):
    model = Shipment
    form_class = ShippingForm

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['instance'] = self.get_object()
        return kwargs


# Or if you're using function based views
def shipping_form_view(request,pk):
    shipment = get_object_or_404(Shipment,pk=pk)
    form = ShippingForm(request,instance=shipment)
    ...

forms.py

class ShippingForm(forms.Form):
    potential_shipping_dates = forms.ChoiceField(choices=[])

    def __init__(self,*args,instance,**kwargs):
        super(ShippingForm,self).__init__(*args,**kwargs)
        self.fields['potential_shipping_dates'].choices = ((dt,dt) for dt in instance.potential_shipping_dates)

ModelChoiceFields 用于选择 object,而不是一个属性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?