【问题标题】:Check if record with multiple fileds exists in database before saving the form在保存表单之前检查数据库中是否存在具有多个文件的记录
【发布时间】:2020-08-24 10:53:09
【问题描述】:

我有这个模型:

class Venue(models.Model):
    venue_name = models.CharField(max_length=50)
    venue_city = models.CharField(max_length=50)

我有一个表单,用户可以在其中输入场地名称和城市。我想检查数据库中是否已经存在一条记录,并且两个字段都已包含在同一条记录中。例如,不同城市可能有相同的场地名称。

我在 forms.py 中添加了支票:

class VenueForm(forms.ModelForm):
    class Meta:
        model = Venue
        fields = ['venue_name', 'venue_city', 'venue_country']

    def save(self, commit=True):
            venue = super(VenueForm, self).save(commit=False)
            venue_name = self.cleaned_data['venue_name']
            venue_city = self.cleaned_data['venue_city']
            if Venue.objects.filter(venue_city=self.cleaned_data['venue_city']).exists() and Venue.objects.filter(venue_name=self.cleaned_data['venue_name']).exists(): # I know this doesn't work: it's as far as I can get.
                logger.error(venue_name + ' already exists')
            if commit:
                venue.save()

            return venue

最后是我的 view.py:

def venue_add_view(request):

    form_venue = VenueForm(request.POST or None)

    if form_venue.is_valid():

        form_venue.save()

    context = {
        'form_venue': form_venue,
    }

    return render(request, "venue-add.html", context)

现在它成功检查名称或城市是否已经存在。我想要做的是询问数据库它们是否存在于同一条记录中。我该怎么做?

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    您可以简单地将两个语句添加到同一个过滤器中:

    Venue.objects.filter(venue_city=self.cleaned_data['venue_city'], venue_name=self.cleaned_data['venue_name']).exists()
    

    这会检查是否存在具有城市和名称为 cleaned_data 的 Venue 对象。

    【讨论】:

    • 当然!非常感谢,这很容易:)(一旦你知道了)。
    • 当然很好。告诉 stackoverflow 编码人员:我需要等待 5 分钟 :) .
    • 好吧抱歉,不知道 5 分钟规则……关于错误检查 this
    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多