如何在Django模型中存储模型元组的字段? [英] How to store field of tuples of models in Django models?

查看:192
本文介绍了如何在Django模型中存储模型元组的字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在翻译的网页上。我坚持设计一个数据结构。所以有一个模型翻译,语言和水平。价格取决于语言和水平(标准级别乘以1x,Professional 1.5x等)



每个翻译器可以翻译具有不同级别(技能)的多种语言。



我不知道如何为此设计模型。我的想法是为每个翻译器存储一些元组(语言,级别)的领域,所以模型翻译器将是:

  class TranslatorProfile (models.Model):
user = models.OneToOneField(User,related_name ='userprofile')
date_of_birth = models.DateField(null = True,blank = True)
phone = models。 CharField(max_length = 40,null = True,blank = True)
IBAN = models.CharField(max_length = 40,null = True,blank = True)
created = models.DateTimeField(auto_now_add = True)
modified = models.DateTimeField(auto_now = True)

#这里是问题
languages = models.FieldOfModelTuples(Language,Level)

class级别(models.Model):
LEVEL_NAMES =(
('standard','Standard'),
('professional','Professional'),
#etc。

name = models.CharField(max_length = 40,choices = LEVEL_NAMES)
price_multiplier = models.FloatFiel d()

类语言(models.Model):
shortcut = models.CharField(max_length = 40)
name = models.CharField(max_length = 40)

def __str __(self):
return self.name

我会感谢任何建议如何解决这个问题(。 FieldOfModelTuples 当然不存在)。也许有一个更简单的方法来做到这一点。

解决方案

我认为级别应该是一个通过模型的字段,用于 TranslatorProfile 语言之间的多对多关系:

  class TranslatorLanguage(models.Model):
translator = models.ForeignKey('app_name.TranslatorProfile')
language = models.ForeignKey('app_name.Language')
level = models.ForeignKey('app_name.Level')

class Meta:
unique_together =(('翻译者','语言'),)

这样可以查询每个翻译器 - 语言对。可以通过以下方式简化翻译人员的语言:

 #这里是PROBLEM 
languages = models.ManyToManyField(语言,通过='TranslatorLanguage')


I'm working on a web for translators. I'm stucked on designing a structure of the data. So there is a model Translator, Language and Level. The price depends on Language and Level (Standard level multiplies the price 1x, Professional 1.5x etc.)

Each Translator can translate multiple languages with different levels (skills).

I can't figure out how to design models for this purpose. My idea is to store for each Translator some field of tuples (Language,Level) so the model Translator would be:

class TranslatorProfile(models.Model):
    user = models.OneToOneField(User, related_name='userprofile')
    date_of_birth = models.DateField(null=True,blank=True)
    telephone = models.CharField(max_length=40,null=True,blank=True)
    IBAN = models.CharField(max_length=40,null=True,blank=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    # HERE IS THE PROBLEM
    languages = models.FieldOfModelTuples(Language,Level)

class Level(models.Model):
     LEVEL_NAMES = (
            ('standard', 'Standard'),
            ('professional', 'Professional'),
            #etc.
        )
    name = models.CharField(max_length=40, choices=LEVEL_NAMES)
    price_multiplier = models.FloatField()

class Language(models.Model):
    shortcut = models.CharField(max_length=40)
    name = models.CharField(max_length=40)

    def __str__(self):
        return self.name

I would appreciate any advice how to solve this problem (.FieldOfModelTuples does not exists of course). Maybe there is a simpler way to do this.

解决方案

I think that Level should be a field on a through-model for a many-to-many relationship between TranslatorProfile and Language:

class TranslatorLanguage(models.Model):
    translator = models.ForeignKey('app_name.TranslatorProfile')
    language = models.ForeignKey('app_name.Language')
    level = models.ForeignKey('app_name.Level')

    class Meta:
        unique_together = (('translator', 'language'),)

this allows you to query all necessary properties for each Translator-Language pair. Access to a translator's languages can then be simplified via:

# HERE IS THE PROBLEM
languages = models.ManyToManyField(Language, through='TranslatorLanguage')

这篇关于如何在Django模型中存储模型元组的字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆