我试图为一个模型创建一个字段,该模型对于选择是唯一的,但可以是空白或空

时间:2017-08-09 21:01:22

标签: django python-2.7

我在模型中有一个字段,我想成为一个选择或空白。可能会有尽可能多的空白项目,但需要对所有其他项目都是唯一的,即同一天可能没有两个特价。

这是我的views.py

class Item(models.Model):
    CATEGORY_CHOICES = (('Sandwich', 'Sandwich'), ('Salad', 'Salad'), ('Slider', 'Slider'), ('Side', 'Side'), ('Drink', 'Drink'))
    DAYS = (('Monday','Monday'), ('Tuesday','Tuesday'), ('Wednesday','Wednesday'), ('Thursday','Thursday'), ('Friday','Friday'), ('Saturday','Saturday'), ('Sunday','Sunday'))

    name = models.CharField(max_length=50)
    description = models.TextField()
    category = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    category = models.CharField(max_length=30, choices=CATEGORY_CHOICES)
    order = models.PositiveSmallIntegerField(default=0, blank=True, null=True)
    special = models.BooleanField(default=False)
    day = models.CharField(max_length=30, choices=DAYS, unique=True, blank=True)
    publish = models.DateField(auto_now=False, auto_now_add=False),
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)

    def __str__(self):
        return self.name

我也试图按星期几(即星期一,星期二等)订购每日特价,我认为以下观点有效,但似乎是按ID订购物品

def specials(request):
    specials_list = Item.objects.filter(special = True).order_by('day')
    context = {
        'specials_list': specials_list,
    }
    return render(request, 'menu/specials.html', context)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

From Django Docs

  

除非在字段上设置了空白= False以及默认值,否则将使用选择框呈现包含“---------”的标签。要覆盖此行为,请将元组添加到包含None的选项中;例如(无,'您的显示字符串')。或者,您可以使用空字符串而不是空字符串,例如在CharField上。

因此,为了允许在任何元组中选择空白,只需添加上面引用的粗体文本

例如:

CATEGORY_CHOICES = (('Sandwich', 'Sandwich'), ('Salad', 'Salad'), ('Slider', 'Slider'), ('Side', 'Side'), ('Drink', 'Drink'), ('None', 'N/A'))

至于唯一性,您已经将一周中的日期设置为唯一。