sam*_*ome 14 python django many-to-many
我有两个模型,每个模型都有一个共享的ManyToMany,使用db_table字段.但是,对于第二个模型,如何阻止syncdb尝试创建共享表?
class Model1(models.Model):
othermodels = ManyToManyField('Model2', db_table='model1_model2', related_name='model1_model2')
class Model2(models.model):
othermodels = ManyToManyField('Model1', db_table='model1_model2', related_name='model2_model1')
Run Code Online (Sandbox Code Playgroud)
它在我的开发环境中工作得很好,因为有些表是零碎地创建的,因为我将它全部构建出来.但是从空数据库中,syncdb抛出:_mysql_exceptions.OperationalError:(1050,"表'model1_model2'已存在")
我是否在第二个模型的字段中缺少一个标志以防止重复创建表?或者我只是这样做完全错了?
Lap*_*anc 21
我也找到了这个解决方案,对我来说非常有用:
class Test1(models.Model):
tests2 = models.ManyToManyField('Test2', blank=True)
class Test2(models.Model):
tests1 = models.ManyToManyField('Test1', through=Test1.tests2.through, blank=True)
Run Code Online (Sandbox Code Playgroud)
你不需要ManyToManyField在关系的两边放置一个.Django会为你做到这一点.
你可能想要更像这样的东西:
class Model1(models.Model):
name = models.CharField(max_length=128)
...
class Model2(models.Model):
name = models.CharField(max_length=128)
othermodels = models.ManyToManyField(Model1, through='Model1Model2')
...
class Membership(models.Model):
class Meta:
db_table = 'model1_model2'
model1 = models.ForeignKey(Model1)
model2 = models.ForeignKey(Model2)
Run Code Online (Sandbox Code Playgroud)
当您使用模型时,一个实例Model1会有一个othermodels_set由django自动添加的字段.实例Model2将有othermodels.
class Awesome(models.Model):
one = models.TextField()
class Meta:
# Prevent table creation.
abstract = True
Run Code Online (Sandbox Code Playgroud)
http://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes
这不是你要找的,但这是我相信的最接近的。做个view不是更简单吗?
或许:
class Awesome(models.Model):
one = models.CharField(max_length = 255)
two = models.CharField(max_length = 255)
class AwesomeOne(Awesome):
fieldOne = models.ForeignKey(User, related_name = 'one')
class Meta:
abstract = True
class AwesomeTwo(Awesome):
fieldTwo = models.ForeignKey(User, related_name = 'two')
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建一张表并覆盖该表__getattr__以阻止对原始字段的访问。
| 归档时间: |
|
| 查看次数: |
6741 次 |
| 最近记录: |