标签: modelchoicefield

Django Postgres 没有对字段选择进行验证?

我创建了一个带有字段选择的学生模型。但是,当我保存它时,它不会验证该选择是否在我在模型字段中指定的选择中。

为什么它不会阻止我使用模型中未指定的选项保存新对象?

这是模型:

class Student(models.Model):
    year_in_school = models.CharField(
        max_length=4,
        choices= [
            ('FRES', 'Freshman'),
            ('SOPH', 'Sophomore'),
        ],
    )

Run Code Online (Sandbox Code Playgroud)

这是我在 shell 中编写的代码:

>>> from app.models import Student
>>> new_student = Student.objects.create(year_in_school='HACK')
>>> new_student.year_in_school
'HA'
Run Code Online (Sandbox Code Playgroud)

python django postgresql modelchoicefield

9
推荐指数
1
解决办法
3299
查看次数

Django Model Choice Field 如何返回对象的主键而不是显示值

我正在尝试使用 Django 提供的 modelchoicefield ;但是,它的行为并不符合我的预期。

我希望向最终用户显示的是我的模型中的字符串值(可以工作),但当用户提交表单时返回模型的主键(而不是显示值)。我尝试在 Django 表单上使用 to_field_name="id" ,并且在渲染 HTML 时它确实正确渲染了值,但是当用户提交表单时,我返回的值是显示值,而不是我的主键期待。

customer_edit_form.py

annual_income = forms.ModelChoiceField(label='Annual income', to_field_name="id", queryset=cust_income_range.objects.all(), empty_label='-- None --')
Run Code Online (Sandbox Code Playgroud)

模型.py

# Annual Income Model
class cust_income_range(models.Model):
    id = models.IntegerField(primary_key=True)
    range = models.CharField(max_length=50)

    def __str__(self):
        return self.range
Run Code Online (Sandbox Code Playgroud)

客户视图.py

annual_income = form.cleaned_data['annual_income']
Run Code Online (Sandbox Code Playgroud)

python django modelchoicefield

5
推荐指数
1
解决办法
2544
查看次数

自定义标签,例如使用 django-filter

我有观察者模型,它通过 OneToOneRelation 扩展用户模型。我对具有观察者外键的模型清单进行了过滤。这是 models.py 代码:

\n\n
class Observer(models.Model):\n    user = models.OneToOneField(User, on_delete=models.CASCADE)\n    rating = models.IntegerField(default=0)\n    bird_ratings = models.ManyToManyField(\'BirdName\', through=\'BirdRatings\')\n\nclass Checklist(gismodels.Model):\n    date = models.DateField()\n    time_start = models.TimeField(null=True)\n    time_end = models.TimeField(null=True)\n    site_name = models.CharField(max_length=200)\n    municipality = models.CharField(max_length=200)\n    observer = models.ForeignKey(Observer, null=True, default=\'\')\n    other_observers = models.CharField(max_length=150, default=\'\')\n    note = models.CharField(max_length=2000)\n    location_note = models.CharField(max_length=2000, default=\'\')\n    position = gismodels.PointField(null=True, srid=4326)\n    created = models.DateTimeField(db_index=True, null=True)\n    rating = models.IntegerField(default=0)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我在filters.py中创建了ChecklistFilter类:

\n\n
class ChecklistFilter(django_filters.FilterSet):\n    date = DateFromToRangeFilter(label=\'Datum pozorov\xc3\xa1n\xc3\xad\', widget=RangeWidget(attrs={\'display\': \'inline\'}))\n    #groups = django_filters.ModelMultipleChoiceFilter(queryset=User.objects.filter(), widget=forms.CheckboxSelectMultiple)\n    created = DateFilter(label=\'Datum …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms django-filter modelchoicefield

4
推荐指数
1
解决办法
4707
查看次数

显示 __str__ 以外的字段

我试图从下面的模型中显示版本字段,而不是默认的str是 field2_name:

注意:这个 SO 链接Displaying a specific field in a django form可能比我需要的更多,但我不是 100% 确定。我试图实现这一点,但没有成功。

另请注意,我在https://docs.djangoproject.com/en/1.10/ref/forms/fields/尝试了示例,但无法使其正常工作

型号(通用名称):

class CodeVersion(models.Model):
field1= models.ForeignKey(SomeOtherModel, on_delete=models.CASCADE)
field2_name = models.CharField(max_length=256)
field3_description = models.CharField(max_length=1000, blank=True)
version = models.PositiveIntegerField()

def __str__(self):
  return self.field2_name
Run Code Online (Sandbox Code Playgroud)

形式:

class VersionsForm(forms.Form):

code_versions = forms.ModelChoiceField(queryset=CodeVersion.objects.none())

def __init__(self, SomeOtherModel_id):
   super(VersionsForm, self).__init__()
   self.fields['infocode_versions'].queryset = CodeVersion.objects.filter(SomeOtherModel_id=SomeOtherModel_id)
Run Code Online (Sandbox Code Playgroud)

这有效 - 它按预期返回 field2_name 。

我该如何返回版本 - 最简单的方法是什么?

任何帮助或指导表示赞赏。

django django-forms modelchoicefield

3
推荐指数
1
解决办法
3315
查看次数

Django - 如何更改 forms.ModelChoiceField 的值

我想使用forms.ModelChoiceField. 我已经阅读了很多关于这个主题的文档,但事实证明它很难达到预期的结果!

这是我的代码。

我有这个表格:

表格.py

from django import forms
from asset_db.models import Profiles


class SubmitJob(forms.Form):

    material_id = forms.CharField(max_length=8)
    workflow = forms.ModelChoiceField(queryset=Profiles.objects.distinct('name'))
    start_datepicker = forms.CharField(max_length=12)
    end_datepicker = forms.CharField(max_length=12)
Run Code Online (Sandbox Code Playgroud)

这个型号:

class Profiles(models.Model):

    id = models.DecimalField(6).auto_creation_counter
    name = models.CharField(max_length=256, default='null')
    target_path = models.CharField(max_length=256, default='null')
    target_profile = models.TextField(max_length=1024, default='null')
    package_type = models.CharField(max_length=256, default='null')
    video_naming_convention = models.CharField(max_length=256, default='null')
    image_naming_convention = models.CharField(max_length=256, default='null')
    package_naming_convention = models.CharField(max_length=256, default='null')

    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

这是 HTML 输出:

<p><label for="id_workflow">Workflow:</label> <select id="id_workflow" name="workflow" required>
<option value="" selected="selected">---------</option>
<option …
Run Code Online (Sandbox Code Playgroud)

python forms django modelchoicefield

3
推荐指数
1
解决办法
4951
查看次数

如何在 __init__ 方法中访问 django 表单值以进行查询

我有一个包含外键的模型:

class Part(models.Model):
    partType = models.ForeignKey(PartType, on_delete=models.CASCADE)
    brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
    part_name = models.CharField(max_length=60)

class QuotePart(models.Model):
    quote = models.ForeignKey(Quote, on_delete=models.CASCADE)
    line = models.PositiveSmallIntegerField(default=1)
    partType = models.ForeignKey(PartType, on_delete=models.CASCADE)
    # part can be None if the part has not been selected
    part = models.ForeignKey(Part, on_delete=models.CASCADE,blank=True,null=True)
Run Code Online (Sandbox Code Playgroud)

我有一个表单,允许将零件添加到报价中,并希望将表单上的选择限制为正确的零件类型,但我的代码不起作用:

    class QuoteBikePartForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(QuoteBikePartForm, self).__init__(*args, **kwargs)
        self.fields['partType'].widget.attrs['disabled'] = True
        self.fields['frame_part'].widget.attrs['disabled'] = True
        partType = kwargs.pop('partType')
        self.fields['part'].queryset = Part.objects.filter(partType=partType.pk)

    class Meta:
        model = QuotePart
        fields = ['quote','line','partType','frame_part', 'part', 'quantity','cost_price', 'sell_price']

QuoteBikePartFormSet = inlineformset_factory(Quote, QuotePart, …
Run Code Online (Sandbox Code Playgroud)

python django modelchoicefield

3
推荐指数
1
解决办法
2086
查看次数

选择一个有效的选项。该选择不是可用的选择之一

在我的应用程序中,我有一个下拉列表(部门),它取决于之前从下拉列表(faculty 字段)中选择的值。我正在使用 ajax 来获取工作正常的新值。但是,当我尝试保存表单时,我得到了选择一个有效的选择。该选择不是可用的选择之一。

这是我的模型

from django.db import models
from system.models import FacultyData, DepartmentData, SessionData, SemesterData, SettingsData

# Create your models here.

class SchoolFees(models.Model):
    fid = models.ForeignKey(FacultyData, on_delete= models.SET_NULL, null=True)
    did = models.ForeignKey(DepartmentData, on_delete= models.SET_NULL, null=True)
    sid = models.ForeignKey(SessionData, on_delete= models.SET_NULL, null=True)
    amount = models.CharField(max_length=30)

    def __str__(self):
        return self.amount
Run Code Online (Sandbox Code Playgroud)

和我的 form.py

from django import forms
from . import models
from system.models import FacultyData, DepartmentData, SessionData
from .models import SchoolFees



class FeesCreationForm(forms.ModelForm):
    fid = forms.ModelChoiceField(queryset=FacultyData.objects.all(), empty_label="--Select Faculty--",
                                 widget=forms.Select(attrs={'class': 'form-control'}))

    did …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms modelchoicefield

1
推荐指数
1
解决办法
3554
查看次数