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

我想访问外键的其他对象。


models.py


from django.db import models


class 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.name


class 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 Price


class 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验证此表单?


慕的地10843
浏览 149回答 1
1回答

弑天下

您可以使用您的clean_interested_in方法。在该方法中,self.cleaned_data['interested_in']应为相关对象。def clean_interested_in(self):&nbsp; &nbsp; buyer_interested_in_box = self.cleaned_data['interested_in']&nbsp; &nbsp; if ((buyer_interested_in_box.apples is None or buyer_interested_in_box.apples < 10) or&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (buyer_interested_in_box.bananas is None or buyer_interested_in_box.bananas < 10) or&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (buyer_interested_in_box. mangos is None or buyer_interested_in_box. mangos < 10)):&nbsp; &nbsp; &nbsp; &nbsp;raise forms.ValidationError('Not enough fruits. Please select another box')&nbsp; &nbsp; return buyer_interested_in_box请注意,您需要检查水果值是否为None。如果将模型字段更改为,null=False则不需要此检查,并且可以简化代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python