1

私が物件を持っていて、それが売りに出されたり、賃貸されたりする可能性があるとしましょう(それぞれに関連する価格があります)、モデルをどのように構成する必要がありますか?

A:

class Property(models.Model):
    name = models.CharField()
    sale_price = models.DecimalField(max_digits=14, decimal_places=2)
    rent_price = models.DecimalField(max_digits=14, decimal_places=2)

B:

class Property(models.Model):
    name = models.CharField()

CATEGORY_CHOICES = (
    (u'sale', u'Sale'),
    (u'rent', u'Rent'),
)

class Category(models.Model):
    property = models.ForeignKey('Property')
    name = models.CharField(max_length=25, choices=CATEGORY_CHOICES)
    price = models.DecimalField(max_digits=14, decimal_places=2)

C:

class Property(models.Model):
    name = models.CharField()

class Sale(models.Model):
    property = models.ForeignKey('Property')
    price = models.DecimalField(max_digits=14, decimal_places=2)

class Rent(models.Model):
    property = models.ForeignKey('Property')
    price = models.DecimalField(max_digits=14, decimal_places=2)

販売/賃貸の特定のフィールドを追加したい場合は、Cの方が柔軟性が高いと思います。構造Bの方がクエリに適しているようですが、よくわかりません。

私がCと一緒に行ったとすると、たとえば、販売中の物件をどのように照会しますか?

4

3 に答える 3

3

Aは、それでやり遂げることができる場合、実際には最高です。それがなければ、Bのようなものでも構いません。C 全然ダメ。

SaleオブジェクトでRentはなく、オブジェクトの属性です。それらをモデルにするのは恐ろしいデザインです。

于 2012-05-15T15:52:14.350 に答える
0

C を使用する場合は、次のように販売中の物件を照会できます。

properties = Property.objects.filter(sale__isnull=False)

これは Django docs のように機能するはずです: 関係にまたがるルックアップ

このスキーマでは、1 つの物件に対して複数の賃貸料または販売価格が設定される可能性があることに注意してください。これは、希望どおりではない可能性があります。

于 2012-05-15T15:48:04.257 に答える