我试图创建一个网站目录,我是Django的新手。我需要的是:一个站点可以有许多支付处理器,一个支付处理器(Paypal,Payza等)可以属于许多站点。我试图创建一个表关系来表示这一点。我的模型是这样的:
# Models.py
class Sites(models.Model):
name = models.CharField(max_length=75)
link = models.CharField(max_length=150)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class PaymentProcessors(models.Model):
name = models.CharField(max_length=75)
def __str__(self):
return self.name
class Sites_PaymentProcessors(models.Model):
site = models.ManyToMany(Sites)
payment_processor = models.ManyToMany(PaymentProcessors)
首先,我想知道我的模型是否正确。如果没有,我该如何解决?
其次,我使用Django管理网站创建网站和付款处理器,如何在Sites_PaymentProcessors
表格中自动填充Sites
和Payment_Processors
之间的关系我添加了一个新网站?
答案 0 :(得分:2)
我会略微更改模型以容纳ManyToManyFields
like this:
class Sites(models.Model):
name = models.CharField(max_length=75)
link = models.CharField(max_length=150)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class PaymentProcessors(models.Model):
name = models.CharField(max_length=75)
sites = models.ManyToManyField('Sites', related_name='payment_processors')
def __str__(self):
return self.name
现在,如果您想要自定义字段或存储更多信息以及关系,您可以使用through
table
例如,如果您想关联金额限制或更多自定义:
class Sites(models.Model):
name = models.CharField(max_length=75)
link = models.CharField(max_length=150)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class PaymentProcessors(models.Model):
name = models.CharField(max_length=75)
sites = models.ManyToManyField('Sites', related_name='payment_processors', through='SitePaymentProcessor')
def __str__(self):
return self.name
from django.core.validators import MaxValueValidator
class SitePaymentProcessor(models.Model):
site = models.ForeignKey('Site')
payment_processors = models.ForeignKey('PaymentProcessors')
amount_limit = models.IntegerField(default=1000,
validators=[
MaxValueValidator(100)
])
现在,这只是一个例子。
现在,registering the admin classes可以让您通过管理界面将数据填充到模型中。
要自动填充大型数据集,我会考虑使用fixtures而不是单独填充元素。