Python 需要Django建模方面的帮助吗

Python 需要Django建模方面的帮助吗,python,django,models,modeling,Python,Django,Models,Modeling,我正在创建一个Django应用程序,这个问题又来了(我已经遇到了,但我用一种我认为不正确的方式解决了它) 所以我有这些模型: def Person(models.Model): name = models.CharField(max_length=30) status = models.ManyToManyField(Status) def Status(models.Model): name = models.CharField(max_length=30) 任何人

我正在创建一个Django应用程序,这个问题又来了(我已经遇到了,但我用一种我认为不正确的方式解决了它)

所以我有这些模型:

def Person(models.Model):
    name = models.CharField(max_length=30)
    status = models.ManyToManyField(Status)

def Status(models.Model):
    name = models.CharField(max_length=30)
任何人最多可以有3个状态(或无)。这应该是一个字符串数组,只包含几个可能的状态。e、 快乐、幸运、坚强

然而,这里不可能有选择的查尔菲尔德,因为一个人可能同时感到快乐和坚强


我当前的方法是否是最好的方法?

您需要验证
clean
方法中每个人的状态计数

from django.db import models
from django.core.exceptions import ValidationError


class Status(models.Model):
    name = models.CharField(max_length=30)


class Person(models.Model):
    name = models.CharField(max_length=30)
    status = models.ManyToManyField(Status)

    def clean(self):
        # check person status count
        if self.status.all().count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

更新

由于它是一个
manytomy
关系,因此在创建对象期间,您永远不会验证它,除非您有一个单独的表单用于为人员添加状态

如果“状态”字段与创建人员的表单相同,则此检查必须在表单中

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person

    def clean(self):
        statuses = self.cleaned_data.get('status')
        if status.count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

为什么使用这种方法


这种模型设计将允许您使用多种不同的查询方式。比如
找到快乐的人
对悲伤的人进行计数
并最终获得状态相似的人

您需要在
清除
方法中验证每个人的状态计数

from django.db import models
from django.core.exceptions import ValidationError


class Status(models.Model):
    name = models.CharField(max_length=30)


class Person(models.Model):
    name = models.CharField(max_length=30)
    status = models.ManyToManyField(Status)

    def clean(self):
        # check person status count
        if self.status.all().count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

更新

由于它是一个
manytomy
关系,因此在创建对象期间,您永远不会验证它,除非您有一个单独的表单用于为人员添加状态

如果“状态”字段与创建人员的表单相同,则此检查必须在表单中

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person

    def clean(self):
        statuses = self.cleaned_data.get('status')
        if status.count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

为什么使用这种方法


这种模型设计将允许您使用多种不同的查询方式。比如
找到快乐的人
对悲伤的人进行计数
并最终获得状态相似的人

您需要在
清除
方法中验证每个人的状态计数

from django.db import models
from django.core.exceptions import ValidationError


class Status(models.Model):
    name = models.CharField(max_length=30)


class Person(models.Model):
    name = models.CharField(max_length=30)
    status = models.ManyToManyField(Status)

    def clean(self):
        # check person status count
        if self.status.all().count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

更新

由于它是一个
manytomy
关系,因此在创建对象期间,您永远不会验证它,除非您有一个单独的表单用于为人员添加状态

如果“状态”字段与创建人员的表单相同,则此检查必须在表单中

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person

    def clean(self):
        statuses = self.cleaned_data.get('status')
        if status.count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

为什么使用这种方法


这种模型设计将允许您使用多种不同的查询方式。比如
找到快乐的人
对悲伤的人进行计数
并最终获得状态相似的人

您需要在
清除
方法中验证每个人的状态计数

from django.db import models
from django.core.exceptions import ValidationError


class Status(models.Model):
    name = models.CharField(max_length=30)


class Person(models.Model):
    name = models.CharField(max_length=30)
    status = models.ManyToManyField(Status)

    def clean(self):
        # check person status count
        if self.status.all().count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

更新

由于它是一个
manytomy
关系,因此在创建对象期间,您永远不会验证它,除非您有一个单独的表单用于为人员添加状态

如果“状态”字段与创建人员的表单相同,则此检查必须在表单中

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person

    def clean(self):
        statuses = self.cleaned_data.get('status')
        if status.count() > 3:
            raise ValidationError("Person can not have more than 3 statuses")

为什么使用这种方法


这种模型设计将允许您使用多种不同的查询方式。比如
找到快乐的人
统计悲伤的人
并最终得到状态相似的人

只需快速添加-如果您使用PostgreSQL(这可能是最好的决定),您还可以使用数组字段,您可以为其指定最大大小


只是一个快速添加-如果您使用的是PostgreSQL(这可能是最好的决定),您还可以使用数组字段,您可以为其指定最大大小


只是一个快速添加-如果您使用的是PostgreSQL(这可能是最好的决定),您还可以使用数组字段,您可以为其指定最大大小


只是一个快速添加-如果您使用的是PostgreSQL(这可能是最好的决定),您还可以使用数组字段,您可以为其指定最大大小



另一个选项是使用类似

的标记库另一个选项是使用类似

的标记库另一个选项是使用类似

的标记库另一个选项是使用类似

的标记库状态下可能有多个布尔属性(每个情绪一个)如果你想有几个可能的状态,考虑一个?是的,我将有一个状态的固定。你可以在状态下有多个布尔属性(一个用于每个情绪)?如果你想有几个可能的状态,考虑a?是的,我将有一个状态的固定。你可以在状态下有多个布尔属性。(每个情绪都有一个)?如果你想有几个可能的状态,考虑A?是的,我将有一个状态的固定。你可以在状态下有多个布尔属性(每个情绪一个)。如果你想有几个可能的状态,想想A?是的,我将有一个状态的固定。好吧,但是你认为这是最好的方法吗?创建一个状态模型对我来说很奇怪,因为它只有一个字段。但是我想这是唯一的方法,对吗?AgnAs你的要求是什么?如果你想让人拥有很多状态和状态如果有很多人,那么你就在正确的轨道上。好吧,但你认为这是最好的方法吗?创建一个身份模型对我来说很奇怪,因为它只有一个字段。但我想这是唯一的方法,对吗?@agnans你的要求是什么?如果你想让一个人有很多身份,并且身份可以有很多人,那么你就在正确的轨道上。好的,但你认为这是最好的方法吗?创建一个状态模型对我来说很奇怪,因为它只有一个字段。但我想这是唯一的方法,对吗?@agnans你的要求是什么?如果你想让一个人有很多状态,并且状态可以有很多人,那么你就在正确的轨道上。好的,但你认为这是最好的方法吗?Crea叮叮声