我能够创建脚本直接将数据添加到Postgresql表中。唯一的问题是ManyToManyFields。虽然我能够添加数据,但无法链接到ManyToMany。
这是我的models.py
class Category(MPTTModel):
name = models.CharField(max_length=150, unique=True)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
class MPTTMeta:
order_insertion_by = ['name']
def __str__(self):
return self.name
from django.urls import reverse
class Listing(models.Model):
name = models.CharField('Business Name', max_length=250)
address = models.CharField('Address', max_length=300)
phone_number = models.CharField('Phone Number', max_length=20)
web = models.URLField('Website')
category = models.ManyToManyField(Category)
main_image = models.CharField('Image Link', max_length=500)
LISTING_STATUS = (
('a', 'Active'),
('e', 'Expired'),
('i', 'Inactive'),
('c', 'Claimed'),
)
status = models.CharField(
max_length=1,
choices=LISTING_STATUS,
blank=True,
default='a',
help_text='Listing Status',
)
def get_cats(self):
return ", ".join([str(p) for p in self.category.all()])
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('listing-detail', args=[str(self.id)])
在另一个文件中,我创建了另一个代码以将信息添加到数据库中:
def insert(name, address, phone_number, web, status, main_image, ):
conn = psycopg2.connect("host=localhost dbname=augustalife user=postgres")
cur = conn.cursor()
cur.execute("INSERT INTO listings_listing (name, address, phone_number, web, status, main_image) VALUES (%s,%s,%s,%s,%s,%s);", (name, address, phone_number, web, status, main_image))
conn.commit()
conn.close()
我知道,如果我使用Django shell
,我可以手动链接条目。但是,是否有一种方法可以添加listing
并将其与适当的category
连接
提前谢谢。
发布于 2021-12-07 21:02:44
您应该使用Django的ORM代替:
def insert(name, address, phone_number, web, status, main_image):
Listing.objects.create(
name=name,
address=address,
phone_number=phone_number,
website=web,
status=status,
main_image=main_image,
)
我不确定如何确定哪些类别属于给定的列表,但是链接类别和列表的过程非常简单:
listing = Listing.objects.create(...)
category = Category.objects.first()
listing.categories.add(category)
https://stackoverflow.com/questions/70266554
复制相似问题