这里我有一个用户模型:
class User(AbstractUser):
plate_number = models.CharField(max_length=10, blank=True, null=True)
和车辆模型:
class Vehicle(models.Model):
plate_number = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
我认为我的设计不正确,因为“车辆”模型中的plate_number不是CharField,而是User。
如何在两个模型中使两个 plate_number 完全相同?
逻辑是,用户可能没有板号,而车辆必须在用户模型中存在相同的板号,用户可以拥有 AT MOST一辆车辆和一辆车辆仅属于一个用户,我想更改其中任何一个,然后对方字段自动进行相同的更改。
这可能吗?怎么样
class User(AbstractUser):
vehicle = models.OneToOneField('ride.Vehicle', blank=True, null=True, on_delete=models.SET_NULL())
和
class Vehicle(models.Model):
plate_number = models.CharField(max_length=10, on_delete=models.CASCADE, primary_key=True, blank=False, null=False)
这项工作可以吗?
答案 0 :(得分:1)
我看不到重复的车牌号。正如您在用户和车辆之间定义了OneToOne关系一样,这意味着一个用户只能拥有一辆车辆。因此,我认为最好在车辆模型类中同时保留车牌号和OneToOne连接,如下所示:
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")
在这里,我已经在Vehicle模型中定义了related_name
。
因此,在此设置中,用户只有在与一辆车辆连接时才能拥有一个车牌号。当访问该数据时,您可以通过以下方式简单地获取它:
user = User.objects.first()
user.vehicle # Vehicle object
user.vehicle.plate_number # plate number
答案 1 :(得分:0)
可以这样做
用户模型:
class User(AbstractUser):
plate_number = models.CharField(max_length=10, blank=True, null=True)
车辆型号:
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)
因此,当您保存车辆时,请检查是否存在该车牌号的用户,如果不存在,则将该用户保存在车中,然后用户为空,并将车牌号保存在char字段中。