Django - 仅在模型中提供部分外键
Django - Feeding only part of Foreignkey in models
我是 django 的新手,我想做一个练习 "home expenses"。
我已经做了简单的模型和形式:
(来自模型)
#models.py
#these are the type (groceries/clothes/etc. )
class TypWydatku(models.Model):
typ_wydatku = models.CharField(max_length=25)
data_wpisu=models.DateField(auto_now_add=True)
#these are the actual input with dates/prices/etc
class Wpisy(models.Model):
data_zakupu=models.DateField(default=timezone.now())
data_wpisu=models.DateField(auto_now=True)
typ_wydatku=models.ForeignKey(TypWydatku)
kwota=models.FloatField('kwota')
uwagi=models.CharField(max_length=255, blank=True)
但现在我想添加另一个型号,它将更具体地描述与我的汽车相关的费用。所以我添加了另一个 TypWydatku - Moto with id=3
下一步是创建具有额外字段(里程/油箱)的新模型:
#models.py
(...)
class WpisyMoto(models.Model):
wpis=models.ForeignKey(Wpisy)
przebieg=models.IntegerField()
uwagi=models.CharField(max_length=200)
litry=models.FloatField()
#and more
我现在拥有最简单的表格 :
# forms.py
class TypWydatkuForm(ModelForm):
class Meta:
model = TypWydatku
fields = '__all__'
class WpisyForm(ModelForm):
class Meta:
model = Wpisy
fields = '__all__'
class WpisyMotoForm(ModelForm):
class Meta:
model = WpisyMoto
fields = '__all__'
我想在模板中有选择字段 'wpis',我只想在其中看到那些有 'typ_wydatku'=3 的字段。我应该怎么做?
来自 docs 的 ModelChoiceField 字段(这是 Django 将用来表示 ForeignKey 字段的表单字段类型),这可以通过设置表单字段的 queryset 属性来实现:
class WpisyMotoForm(ModelForm):
class Meta:
model = WpisyMoto
fields = '__all__'
def __init__(self, *args, **kwargs):
super(WpisyMotoForm, self).__init__(*args, **kwargs)
self.fields["wpis"].queryset = Wpisy.objects.filter(typ_wydatku__pk=3)
我是 django 的新手,我想做一个练习 "home expenses"。 我已经做了简单的模型和形式: (来自模型)
#models.py
#these are the type (groceries/clothes/etc. )
class TypWydatku(models.Model):
typ_wydatku = models.CharField(max_length=25)
data_wpisu=models.DateField(auto_now_add=True)
#these are the actual input with dates/prices/etc
class Wpisy(models.Model):
data_zakupu=models.DateField(default=timezone.now())
data_wpisu=models.DateField(auto_now=True)
typ_wydatku=models.ForeignKey(TypWydatku)
kwota=models.FloatField('kwota')
uwagi=models.CharField(max_length=255, blank=True)
但现在我想添加另一个型号,它将更具体地描述与我的汽车相关的费用。所以我添加了另一个 TypWydatku - Moto with id=3
下一步是创建具有额外字段(里程/油箱)的新模型:
#models.py
(...)
class WpisyMoto(models.Model):
wpis=models.ForeignKey(Wpisy)
przebieg=models.IntegerField()
uwagi=models.CharField(max_length=200)
litry=models.FloatField()
#and more
我现在拥有最简单的表格 :
# forms.py
class TypWydatkuForm(ModelForm):
class Meta:
model = TypWydatku
fields = '__all__'
class WpisyForm(ModelForm):
class Meta:
model = Wpisy
fields = '__all__'
class WpisyMotoForm(ModelForm):
class Meta:
model = WpisyMoto
fields = '__all__'
我想在模板中有选择字段 'wpis',我只想在其中看到那些有 'typ_wydatku'=3 的字段。我应该怎么做?
来自 docs 的 ModelChoiceField 字段(这是 Django 将用来表示 ForeignKey 字段的表单字段类型),这可以通过设置表单字段的 queryset 属性来实现:
class WpisyMotoForm(ModelForm):
class Meta:
model = WpisyMoto
fields = '__all__'
def __init__(self, *args, **kwargs):
super(WpisyMotoForm, self).__init__(*args, **kwargs)
self.fields["wpis"].queryset = Wpisy.objects.filter(typ_wydatku__pk=3)