为了账号安全,请及时绑定邮箱和手机立即绑定

使用外键以表单的clean方法访问其他对象Django

使用外键以表单的clean方法访问其他对象Django

慕的地10843 2021-03-29 08:21:27
我想访问外键的其他对象。models.pyfrom django.db import modelsclass Box(models.Model):    name = models.CharField(max_length=200,null=True)    apples= models.IntegerField(blank=True, null=True)    banana = models.IntegerField(blank=True, null=True)    mango = models.IntegerField(blank=True, null=True)    def __str__(self):        return self.nameclass Buyer(models.Model):    name_of_buyer = models.CharField(max_length=200,null=True)    address_of_buyer = models.CharField(max_length=200,null=True)    interested_in = models.ForeignKey(Box,on_delete=models.CASCADE,null=True)    Pickup_dt = models.DateField(null=True)    Pickup_time = models.CharField(max_length=80,null=True) 表格from .models import Priceclass Sale(forms.ModelForm):    def clean_interested_in(self):        buyer_interested_in_box = self.cleaned_data['interested_in']        # if the selected box contains less than 10 apples, 10 bananas and 10 mangos:               raise forms.ValidationError('Not enough fruits.Please select another box')             class Meta:        model = Buyer        widgets = {            'Pickup_dt': forms.DateInput(attrs={'class':'datepicker'}),            'Pickup_time': forms.DateInput(attrs={'class':'timepicker'}),        }        fields = '__all__'如何使用外键ID验证此表单?
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

您可以使用您的clean_interested_in方法。在该方法中,self.cleaned_data['interested_in']应为相关对象。


def clean_interested_in(self):

    buyer_interested_in_box = self.cleaned_data['interested_in']

    if ((buyer_interested_in_box.apples is None or buyer_interested_in_box.apples < 10) or 

            (buyer_interested_in_box.bananas is None or buyer_interested_in_box.bananas < 10) or

            (buyer_interested_in_box. mangos is None or buyer_interested_in_box. mangos < 10)):

       raise forms.ValidationError('Not enough fruits. Please select another box')

    return buyer_interested_in_box

请注意,您需要检查水果值是否为None。如果将模型字段更改为,null=False则不需要此检查,并且可以简化代码。


查看完整回答
反对 回复 2021-04-09
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号