首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:如何将两个字段绑定在两个模型中,即使它们完全相同?

Django:如何将两个字段绑定在两个模型中,即使它们完全相同?
EN

Stack Overflow用户
提问于 2019-02-06 03:25:32
回答 2查看 237关注 0票数 1

这里我有一个用户模型:

代码语言:javascript
复制
class User(AbstractUser):
    plate_number = models.CharField(max_length=10, blank=True, null=True)

和一个车辆模型:

代码语言:javascript
复制
class Vehicle(models.Model):
    plate_number = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

我不认为我的设计是正确的,因为plate_number在车辆模型中不是CharField,而是这样的用户。

如何使两个plate_number在两个模型中完全相同?

其逻辑是,用户可能没有,但是车辆必须有--在用户模型中存在相同的plate_number,用户最多只能拥有一辆车辆,而车辆只属于一个用户,我希望任何一个字段的更改,然后对应字段自动进行相同的更改。

这个是可能的吗?怎么样

代码语言:javascript
复制
class User(AbstractUser):
    vehicle = models.OneToOneField('ride.Vehicle', blank=True, null=True, on_delete=models.SET_NULL())

代码语言:javascript
复制
class Vehicle(models.Model):
    plate_number = models.CharField(max_length=10, on_delete=models.CASCADE, primary_key=True, blank=False, null=False)

这个能行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-06 06:55:19

我不认为有重复的车牌号码有任何意义。由于您已经定义了用户和车辆之间的OneToOne关系,意味着一个用户只能拥有一辆车。因此,我认为最好是在车辆模型类中同时保持车牌号码和OneToOne连接,如下所示:

代码语言:javascript
复制
class Vehicle(models.Model):
    plate_number = models.CharField(max_length=10)
    user= models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True, related_name="vehicle")

在这里,我定义了车辆模型中的related_name

因此,在这个设置中,用户只能有一个车牌号码,因为他与一辆车有连接。在访问这些数据时,您可以通过以下方法获得:

代码语言:javascript
复制
user = User.objects.first()
user.vehicle # Vehicle object
user.vehicle.plate_number # plate number
票数 1
EN

Stack Overflow用户

发布于 2019-02-06 04:40:22

这样做是可以的

用户模型:

代码语言:javascript
复制
class User(AbstractUser):
    plate_number = models.CharField(max_length=10, blank=True, null=True)

车辆模型:

代码语言:javascript
复制
class Vehicle(models.Model):
    plate_number = models.CharField(max_length=10, on_delete=models.CASCADE, primary_key=True, blank=False, null=False)
    user= models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True)

因此,在保存车辆时,使用这个车牌号码检查用户,然后将用户保存在车辆中,如果没有,则用户为null,并将车牌号保存在字符字段中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54546199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档