克服'选择'必须是包含没有外键的(实际值,人类可读名称)元组的迭代?

时间:2018-02-11 16:57:25

标签: django django-models python-3.5 django-1.11

我希望以前做过 - 基本上,希望我能正确解释这一点,我喜欢的是一个有一些选择的模型(如下所示)。

我想绕过这些选择'在为模型的选择元组添加第三个或第四个值时,必须是包含(实际值,人类可读名称)元组错误的迭代。

这些选择不仅直接影响您选择的字段,还影响另外几个字段。我已经看过slug字段自动填充的内容,例如博客帖子标题,但是有没有方法可以将多个字段绑定到某个选项?

class Location(models.Model):

  SERVICE_CHOICES = (
    ('bus_station', 'Bus Station', '#cdcdcd'),
    ('cafe', 'Café', '#cdcdcd'),
    ('cinema', 'Cinema', '#cdcdcd'),
    ('gardens', 'Public Gardens', '#cdcdcd'),
    ('library', 'Library'),
    ('public_services', 'Public Services'),
    ('railway_station', 'Railway Station'),
    ('restaurant', 'Restaurant'),
    ('school', 'School'),
    ('shop', 'Shop'),
    ('supermarket', 'Supermarket'),
    ('tourist_attractions', 'Tourist Attractions'),
    ('transit_station', 'Transit Station'),
    ('walks', 'Walks'),
    ('woodland', 'Woodland'),
  )

  locale_descriptor = models.CharField("Locale Descriptor", max_length=50, default='')
  latitude = models.DecimalField("Latitude", max_digits=10, decimal_places=7)
  longitude = models.DecimalField("Longitude", max_digits=10, decimal_places=7)
  title = models.CharField("Title", max_length=60, default='')
  description = models.TextField("Description")
  service_type = models.CharField("Service Type", max_length=80,choices=SERVICE_CHOICES, default='public_service')

有人知道如何自动填充依赖于这些选择的字段吗?

1 个答案:

答案 0 :(得分:0)

我没有清楚地了解你正在尝试做什么,但听起来你需要的是一个ForeignKey关系,而不是试图增加选择元组。像这样:

class ServiceType(models.Model):
    def __unicode__(self):
        return self.service_name

    service_name = modes.CharField(max_length=80)
    color = modes.CharField(max_length=7)


class Location(models.Model):
    locale_descriptor = models.CharField("Locale Descriptor", max_length=50, default='')
    latitude = models.DecimalField("Latitude", max_digits=10, decimal_places=7)
    longitude = models.DecimalField("Longitude", max_digits=10, decimal_places=7)
    title = models.CharField("Title", max_length=60, default='')
    description = models.TextField("Description")
    service_type = models.ForeignKey(ServiceType)

不确定如何影响其他字段,但可以通过覆盖save()方法或实施clean()方法来完成。一个例子:" Django. Override save for model"。