我目前正在尝试在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 模型的初始化、保存、创建函数,但严格不知道什么是好的选择。 在这个过程结束时,我希望汽车和它的司机之间没有映射,但可以使用他名字的哈希找到司机的车。
如果不清楚,或者您是否需要更精确,请告诉我!
任何帮助将不胜感激,
谢谢!
您希望删除从Car
到Driver
的显式链接,因此不应使用ForeignKey
。请注意,缺点是无法使用数据库 JOIN 为驾驶员检索汽车,而必须执行额外的查询。
在Car
和Driver
模型上创建方法来分配驾驶员和检索汽车:
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.car
为some_car.assign_driver(my_driver); some_car.save()
的司机取车,以分配和保存司机。