Django外键字段和限制选择

时间:2014-06-04 16:55:25

标签: sql django

class ProductGroup(models.Model):
    group_sku = models.CharField(unique=True, max_length=255)
    brand = models.CharField(max_length=255)
    ...

class Product(models.Model):
    product_sku = models.CharField(unique=True, max_length=255)
    color = models.CharField(max_length=255)
    size = models.CharField(max_length=255)
    product = models.ForeignKey(Product, limit_choices_to=Q(group_sku__in=product_sku))
    ...

我通过python脚本从XML文件将数据导入Django。

group_sku的格式为" GROUP123"

product_sku的格式为" GROUP123-BLUE-M" (或类似的)每组中有多个产品

如何定义外键关系,以便每个产品都链接到其各自的ProductGroup?或者随时告诉我,如果我以完全错误的方式解决这个问题。

使用Django 1.6.5,Python 2.7和MySQL

1 个答案:

答案 0 :(得分:1)

模型应该像这样定义。使用ForeignKey to Group的Product group字段,表示Product属于Group。

class ProductGroup(models.Model):
    group_sku = models.CharField(unique=True, max_length=255)
    brand = models.CharField(max_length=255)
    ...

class Product(models.Model):
    product_sku = models.CharField(unique=True, max_length=255)
    color = models.CharField(max_length=255)
    size = models.CharField(max_length=255)
    group = models.ForeignKey(Group)

在您的脚本中,您应首先获取所有组并创建它们,然后解析(您可以使用正则表达式)product_sku以了解它属于哪个组。你必须有类似的东西:

# save group
group = Group(group_sku=group_sku_from_xml, ...)
group.save()

# later that script...
group_sku = get_group_from(product_sku_from_xml)
group = Group.objects.get(group_sku=group_sku)

# save product
product = Product(group=group, product_sku=product_sku_from_xml, ...)
product.save()