想要在添加之前确保对象不在queryset中

时间:2013-07-16 16:36:51

标签: django django-models

我的“事件”对象有一个“名称”字段。名称有可能是错误的,因此用户可能会建议新名称。该名称将被放入事件的“建议N”列表中。但是,我不希望在该列表中有一个重复的建议。我觉得这是一个直截了当的问题,但由于某些原因我没有取得多大成功。

以下是我目前的观点:

@login_required
def suggestName(request):
    name = request.POST['name'].strip()
        event_id = request.POST['event_id']
    try:
        e = Event.objects.get(event_id = event_id)
    except Event.DoesNotExist:
        e = customEvent.objects.get(event_id = event_id)
    if name in e.suggestedN.all():
        pass
    else:
        (some code)

我的if name in e.suggestedN.all()声明错了吗?

以下是我的活动模型的简要视图:

class Event(models.Model):
    def __unicode__(self):
        return self.title
    suggestedN = models.ManyToManyField('suggestedName', blank = 'TRUE', null = 'TRUE')


class suggestedName(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=200, blank = 'TRUE', null = 'TRUE')
    votes = models.IntegerField(default = 0)

1 个答案:

答案 0 :(得分:1)

您应该使用m2m上的name属性而不是m2m本身进行比较

@login_required
def suggestName(request):
    name = request.POST['name'].strip()
        event_id = request.POST['event_id']
    try:
        e = Event.objects.get(event_id = event_id)
    except Event.DoesNotExist:
        e = customEvent.objects.get(event_id = event_id)
    if name in e.suggestedN.values_list('name', flat=True):
        pass
    else:
        (some code)