Django:使用外键哈希对模型进行实例化



我目前正在尝试在Django Rest中为一个应该以安全方式存储数据的类项目实现一个API。 我有两种不同的模型:

class Driver(models.Model):
name = models.CharField(max_length=100, blank=False, null=False)

import Driver
class Car(models.Model):
name = models.CharField(max_length=100, blank=False, null=False)
driver = models.ForeignKey(Driver, on_delete=models.CASCADE)

目前,汽车和各自的驾驶员之间存在映射。 我想将汽车映射到它的司机,而不是它的司机,而是映射到应用于它的司机名称的哈希函数的结果。像这样:

import Driver
import hashlib 
class Car(models.Model):
name = models.CharField(max_length=100, blank=False, null=False)
driver = hashlib.md5(models.ForeignKey(Driver, on_delete=models.CASCADE).name).hexdigest()

我知道我上面写的可能是 Django 中的异端,它只是为了传达我想做什么的想法! 为了做到这一点,我想过覆盖 Car 模型的初始化、保存、创建函数,但严格不知道什么是好的选择。 在这个过程结束时,我希望汽车和它的司机之间没有映射,但可以使用他名字的哈希找到司机的车。

如果不清楚,或者您是否需要更精确,请告诉我!

任何帮助将不胜感激,

谢谢!

您希望删除从CarDriver的显式链接,因此不应使用ForeignKey。请注意,缺点是无法使用数据库 JOIN 为驾驶员检索汽车,而必须执行额外的查询。

CarDriver模型上创建方法来分配驾驶员和检索汽车:

class Car(models.Model):
...
driver = models.CharField(max_length=255)
def assign_driver(self, driver):
self.driver = hashlib.md5(driver.name).hexdigest()
class Driver(models.Model):
@property
def car(self):
try:
return Car.objects.get(driver=hashlib.md5(self.name).hexdigest())
except Car.DoesNotExist:
return None

这样,您可以my_driver.carsome_car.assign_driver(my_driver); some_car.save()的司机取车,以分配和保存司机。

相关内容

  • 没有找到相关文章

最新更新